Scala:如何将varargs指定为类型?
而不是Scala:如何将varargs指定为类型?,scala,types,Scala,Types,而不是 def foo(configuration: (String, String)*) 我希望能够写: type Configuration = (String, String)* def foo(configuration: Configuration) 主要用例是在子类中重写时提供一个简单的方法签名 更新: 我可以靠近 type Param = (String, String) def foo(configuration: Param*) 但是有没有更好的方法呢?我想你可以用 t
def foo(configuration: (String, String)*)
我希望能够写:
type Configuration = (String, String)*
def foo(configuration: Configuration)
主要用例是在子类中重写时提供一个简单的方法签名
更新:
我可以靠近
type Param = (String, String)
def foo(configuration: Param*)
但是有没有更好的方法呢?我想你可以用
type Configuration = ((String, String)*)
def foo(configuration: Configuration)
但是它使编译器崩溃(2.8.0.r21161-b20100314020123)。这似乎是scala编译器的一个bug。不,只有ParamType才允许使用
*
,ParamType是匿名函数或方法的参数类型
4.6.2重复参数语法:ParamType::=类型“”最后一个值
参数节的参数可以是
后缀为“”,例如(…,x:T*)。
这种重复参数的类型
然后在方法内部是序列
类型scala.Seq[T]。方法与
重复参数T*取a
类型为T的变量数
Eastsun的例子中的编译器bug在第一行,而不是第二行。这是不允许的:
scala> type VarArgs = (Any*)
defined type alias VarArgs
我提出了一个建议
这与“按名称”参数的限制类似。在这种情况下,编译器会阻止创建类型别名:
scala> type LazyString = (=> String) <console>:1: error: no by-name parameter type allowed here
type LazyString = (=> String)
scala>类型LazyString=(=>String):1:错误:此处不允许按名称的参数类型
键入LazyString=(=>String)
您最后的尝试是表达这一点的标准方式。您可以将其定义为
type Param = (String, String)
type Configuration = Seq[Param]
def foo(configuration : Configuration)
用户必须构造一个Seq实例
foo(List("1"->"2"))
这不是最优的