而不是
def foo(configuration: (String, String)*)
我希望能够写下:
type Configuration = (String, String)*
def foo(configuration: Configuration)
主要用例是在覆盖子类时提供简单的方法签名
更新:
我可以近在咫尺type Param = (String, String)
def foo(configuration: Param*)
但有没有办法做得更好?
答案 0 :(得分:9)
不,*
仅允许用于ParamType,即匿名函数或方法的参数类型。
4.6.2重复参数语法:ParamType :: = Type''最后一个值 参数部分的参数可以 以“”为后缀,例如(...,x:T *)。 这种重复参数的类型 然后在方法内部的序列 输入scala.Seq [T]。方法用 重复参数T *取一个 类型为T的可变数量的参数。
编译器错误@Eastsun的例子是在第一行,而不是第二行。这不应该被允许:
scala> type VarArgs = (Any*)
defined type alias VarArgs
我提出了bug。
这与By-Name Parameters类似。在这种情况下,编译器会阻止创建类型别名:
scala> type LazyString = (=> String) <console>:1: error: no by-name parameter type allowed here
type LazyString = (=> String)
您的最后一次尝试是表达此事的标准方式。
答案 1 :(得分:2)
我认为你可以使用
type Configuration = ((String, String)*)
def foo(configuration: Configuration)
但它使编译器崩溃(2.8.0.r21161-b20100314020123)。这似乎是scala编译器的一个错误。
答案 2 :(得分:1)
您可以将其定义为
type Param = (String, String)
type Configuration = Seq[Param]
def foo(configuration : Configuration)
用户必须构造Seq实例
foo(List("1"->"2"))
这不是最佳的。