了解“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。