在 GitHub 上编辑此页面

命名类型参数 - 更多细节

在本节中,我们将详细介绍 命名类型参数实验性)。

语法

语法添加如下

SimpleExpr1       ::=  ...
                    |  SimpleExpr (TypeArgs | NamedTypeArgs)
NamedTypeArgs     ::=  ‘[’ NamedTypeArg {‘,’ NamedTypeArg} ‘]’
NamedTypeArg      ::=  id ‘=’ Type

特别要注意,命名参数不能传递给类型构造函数

class C[T]

val x: C[T = Int] = // error
  new C[T = Int] // error

class E extends C[T = Int] // error

兼容性注意事项

命名类型参数不会影响二进制兼容性,但会影响源代码兼容性:如果方法类型参数的名称发生更改,任何现有的对该参数的命名引用都会失效。这意味着方法类型参数的名称现在是库的公共 API 的一部分。

(未实现的提案:为了缓解这种情况,scala.deprecatedName 可以扩展到也适用于方法类型参数。)