标签:因此 cond type 编译 通配 ram 模式 array 参数
Scala 允许你指明函数的最后一个参数可以是重复的。这可以允许客户向函数传入可变长度参数列表。想要标注一个重复参数,在参数的类型之后放一个星号。
例如:定义一个可变参数的函数param
def param(args: String*) = for (arg <- args) println(arg)
这样定义, echo 可以被零个至多个 String 参数调用:
//单个参数 param("one") one // 多个参数 param("hello", "world!") hello world!
函数内部,重复参数的类型是声明参数类型的数组。
因此, param函数里被声明为类型" String*"
的 args 的类型实际上是 Array[String]
。然而,如果你有一个合适类型的数组,并尝试把它当作
重复参数传入,你会得到一个编译器错误:
scala> val array= Array("hello", "world", "doc") arr: Array[java.lang.String] = Array("hello", "world", "doc") scala> param(arr) <console>:7: error: type mismatch; found : Array[java.lang.String] required: String param(arr)
要实现这个做法,你需要在数组参数后添加一个冒号和一个 _*
符号,像这样:
scala> param(array: _*)
hello
world
doc
这个标注告诉编译器把 arr 的每个元素当作参数,而不是当作单一的参数传给 echo 。因此当形参为String*时,不能直接把类型为Array[String]的实参直接传入,需要通过:_*进行转换。
扩展:下划线的用法
标签:因此 cond type 编译 通配 ram 模式 array 参数
原文地址:https://www.cnblogs.com/yyy-blog/p/10303056.html