_ 及 :_*
_ 及 :_*
1 _ 下划线的作用
- 通配符,导入包时用
- 在参数后追加
:_*作为一个整体,指示将该参数作为一个参数序列处理,如val s = sum(1 to 5:_*),指示将1 to 5生成的集合中的元素作为参数序列一个个传入 sum 中 - 指代集合中的每个元素,通常用在 map 、filter 等函数中
- 元组中用以访问组员
- 模式匹配中对于不需要的元素,在相应位置使用 _ 作为占位
- 代表某一类型的默认值,如 Int 0;Double 0.0;引用 null
2 可变长度参数
Scala 允许你指明函数的最后一个参数可以是重复的。这可以允许客户向函数传入可变长度参数列表。想要标注一个重复参数,在参数的类型之后放一个星号。例如:
def echo(args: String*) = for (arg <- args) println(arg)
// 这样定义, echo 可以被零个至多个 String 参数调用:
scala> echo()
scala> echo("one")
one
scala> echo("hello", "world!")
hello
world!
函数内部,重复参数的类型是声明参数类型的数组。因此, echo 函数里被声明为类型“ String* ”的 args 的类型实际上是 Array[String] 。然而,如果你有一个合适类型的数组,并尝试把它当作重复参数传入,你会得到一个编译器错误:
要实现这个做法,你需要在数组参数后添加一个冒号和一个 _* 符号,像这样:
val arr = Array("What's", "up", "doc?")
echo(arr: _*)
/**
What's
up
doc?
这个标注告诉编译器把 arr 的每个元素当作参数,而不是当作单一的参数传给 echo 。
*/
def sum(args: Int*):Int={
var total:Int=0
for (arg <- args) {
total=total+arg
}
total
}
val s = sum(1 to 5:_*)

浙公网安备 33010602011771号