Eva*_*ske 22 scala variadic-functions
假设我声明一个函数如下:
def test(args: String*) = args mkString
Run Code Online (Sandbox Code Playgroud)
是什么类型的args?
kir*_*uku 33
这被称为可变数量的参数或简称varargs.这是静态类型是Seq[T]其中T代表T*.因为Seq[T]它是一个接口,所以它不能用作实现,在这种情况下scala.collection.mutable.WrappedArray[T].要找出这样的东西,使用REPL会很有用:
// static type
scala> def test(args: String*) = args
test: (args: String*)Seq[String]
// runtime type
scala> def test(args: String*) = args.getClass.getName
test: (args: String*)String
scala> test("")
res2: String = scala.collection.mutable.WrappedArray$ofRef
Run Code Online (Sandbox Code Playgroud)
Varargs通常与_*符号结合使用,这是编译器将a的元素传递Seq[T]给函数而不是序列本身的提示:
scala> def test[T](seq: T*) = seq
test: [T](seq: T*)Seq[T]
// result contains the sequence
scala> test(Seq(1,2,3))
res3: Seq[Seq[Int]] = WrappedArray(List(1, 2, 3))
// result contains elements of the sequence
scala> test(Seq(1,2,3): _*)
res4: Seq[Int] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9091 次 |
| 最近记录: |