命名类型参数
注意:此功能在 Scala 3 中已实现,但预计不会成为 Scala 3.0 的一部分。
方法的类型参数现在可以通过名称和位置来指定。示例
def construct[Elem, Coll[_]](xs: Elem*): Coll[Elem] = ???
val xs1 = construct[Coll = List, Elem = Int](1, 2, 3)
val xs2 = construct[Coll = List](1, 2, 3)
类似于命名值参数 (x = e)
,命名类型参数 [X = T]
将类型参数 X
实例化为类型 T
。命名类型参数不必按顺序排列(参见上面的 xs1
),未指定的参数由编译器推断(参见上面的 xs2
)。类型参数必须全部命名或未命名,不支持命名和位置类型参数的混合。
动机
命名类型参数的主要好处是,与位置参数不同,您可以选择不为某些参数传递参数,例如上面的 xs2
定义。缺失的类型参数将像往常一样通过本地类型推断来推断。这在某些类型参数可以从其他参数中轻松推断出来的情况下特别有用。
本文