Scala:如何将varargs指定为类型?

Itt*_*ayD 6 types scala

代替

def foo(configuration: (String, String)*)
Run Code Online (Sandbox Code Playgroud)

我想能够写:

type Configuration =  (String, String)*
def foo(configuration: Configuration)
Run Code Online (Sandbox Code Playgroud)

主要用例是在覆盖子类时提供简单的方法签名

更新:我可以靠近

type Param = (String, String)
def foo(configuration: Param*)
Run Code Online (Sandbox Code Playgroud)

但有没有办法做得更好?

ret*_*nym 9

不,*只允许在ParamType上,这是匿名函数或方法的参数类型.

4.6.2重复参数语法:ParamType :: = Type' '参数部分的最后一个值参数可以后缀" ",例如(...,x:T*).然后,方法中的这种重复参数的类型是序列类型scala.Seq [T].重复参数T*的方法采用类型为T的可变数量的参数.

编译错误@Eastsun的例子是在第一行,而不是第二行.这不应该被允许:

scala> type VarArgs =  (Any*)
defined type alias VarArgs
Run Code Online (Sandbox Code Playgroud)

我提出了一个错误.

这与By-Name Parameters类似.在这种情况下,编译器会阻止创建类型别名:

scala> type LazyString = (=> String) <console>:1: error: no by-name parameter type allowed here
       type LazyString = (=> String)
Run Code Online (Sandbox Code Playgroud)

你的最后一次尝试是表达这一点的标准方式.