Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:如何将varargs指定为类型?_Scala_Types - Fatal编程技术网

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"))
这不是最优的