首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型别名与lambda类型

类型别名与lambda类型
EN

Stack Overflow用户
提问于 2014-09-24 06:29:02
回答 2查看 290关注 0票数 2

有谁能解释一下这样做的利弊

代码语言:javascript
复制
type VNel[+A] = ValidationNel[String, A]
x.sequence[VNel, ....

vs

代码语言:javascript
复制
x.sequence[({ type l[a] = ValidationNel[String, a] })#l, ....

据我所知,使用结构类型会导致必须使用反射的运行时性能损失。

EN

回答 2

Stack Overflow用户

发布于 2014-09-24 07:44:39

类型lambda是一种内联表示复杂类型的方法。

类型别名是为类型创建标识符的方式。它可以是一个复杂的类型,也可以像type UserId = Int一样简单。当您开始多次需要复杂类型,或者希望通过将复杂签名分解为多个部分来简化复杂签名时,它非常有用。

类型lambdas和类型别名都不是结构化类型。而是一种表达类型的方式。

有关lambdas类型的更多详细信息:https://stackoverflow.com/a/8737611/547564

票数 3
EN

Stack Overflow用户

发布于 2014-09-25 21:24:51

它们基本上是等效的-使用你发现更清楚的。IMO类型别名通常更具可读性。在要扩展的特征(或类)的上下文中,lambda类型可以更清晰,因为它可以防止覆盖类型,但这在很大程度上是一种边缘情况。

在普通代码中访问在结构类型中定义的值确实会产生使用反射的成本。但在类型lambda中,结构类型仅用作泛型类型参数,它将在运行时被擦除。因此,不会对运行时性能造成影响。

如果你正在广泛使用lambdas类型,你可能会考虑kind-projector插件,它提供了更方便的语法(并避免了与结构类型的视觉上的误导性相似)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26005700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档