了解“types”关键字在Scala中的作用
我是新来的Scala,我真的不能find关于type
关键字的很多。 我想了解下面的expression可能意味着什么:
type FunctorType = (LocalDate, HolidayCalendar, Int, Boolean) => LocalDate
FunctorType
是某种别名,但它表示什么?
是的, types别名 FunctorType
只是一个简写
(LocalDate, HolidayCalendar, Int, Boolean) => LocalDate
types别名通常用于保持代码的其余部分简单:现在可以编写
def doSomeThing(f: FunctorType)
这将被编译器解释为
def doSomeThing(f: (LocalDate, HolidayCalendar, Int, Boolean) => LocalDate)
这有助于避免定义许多自定义types,例如,在其他types上定义的元组或函数。
types中还有其他一些有趣的用例,如在Scala编程的 这一章中所描述的。
实际上Scala中的type
关键字不仅仅是将一个复杂的types别名为一个更短的名称。 它引入了types成员 。
如你所知,一个类可以有字段成员和方法成员。 那么,斯卡拉还允许类有types成员。
实际上,在您的特定情况下,引入一个别名,可以让您编写更简洁的代码。 在执行types检查时,types系统只是用实际typesreplace别名。
但是你也可以有这样的事情
trait Base { type T def method: T } class Implementation extends Base { type T = Int def method: T = 42 }
像其他类的成员一样,types成员也可以是抽象的(你只是不指定实际的值),并且可以在实现中被覆盖。
types成员可以被看作是generics的双重性,因为你可以用generics实现的许多东西都可以被转换为抽象types成员。
所以是的,他们可以用于别名,但不要限制他们,因为他们是Scala的types系统的一个强大的function。
请看这个优秀的答案更多细节:
斯卡拉:抽象types与generics
只是一个例子,看看如何使用“type”作为别名:
type Action = () => Unit
上面的定义将Action定义为过程types(方法)的一个别名,它取一个空的参数列表并返回Unit。