有谁能解释一下这样做的利弊
type VNel[+A] = ValidationNel[String, A]
x.sequence[VNel, ....vs
x.sequence[({ type l[a] = ValidationNel[String, a] })#l, ....据我所知,使用结构类型会导致必须使用反射的运行时性能损失。
发布于 2014-09-24 07:44:39
类型lambda是一种内联表示复杂类型的方法。
类型别名是为类型创建标识符的方式。它可以是一个复杂的类型,也可以像type UserId = Int一样简单。当您开始多次需要复杂类型,或者希望通过将复杂签名分解为多个部分来简化复杂签名时,它非常有用。
类型lambdas和类型别名都不是结构化类型。而是一种表达类型的方式。
有关lambdas类型的更多详细信息:https://stackoverflow.com/a/8737611/547564
发布于 2014-09-25 21:24:51
它们基本上是等效的-使用你发现更清楚的。IMO类型别名通常更具可读性。在要扩展的特征(或类)的上下文中,lambda类型可以更清晰,因为它可以防止覆盖类型,但这在很大程度上是一种边缘情况。
在普通代码中访问在结构类型中定义的值确实会产生使用反射的成本。但在类型lambda中,结构类型仅用作泛型类型参数,它将在运行时被擦除。因此,不会对运行时性能造成影响。
如果你正在广泛使用lambdas类型,你可能会考虑kind-projector插件,它提供了更方便的语法(并避免了与结构类型的视觉上的误导性相似)。
https://stackoverflow.com/questions/26005700
复制相似问题