什么是 :_*,它在Scala中的实现方式是什么?

3

我所了解的内容:

scala> def fx(s: String *) = s.foreach(println)
fx: (s: String*)Unit

scala> val lst = List("1","2","3")
lst: List[java.lang.String] = List(1, 2, 3)

scala> fx(lst:_*)
1
2
3

我想知道:

  1. 如何通过map实现:_*
  2. 是否有其他替代方法?
  3. :_*在Scala中是如何定义的?

谢谢。

2个回答

8

这只是一种语法糖,向编译器表示您已经提供了一系列元素,没有其他的“实现”。有关更多信息,请参阅Scala 语言规范(§6.6,第78页)。


1

对于一个接收可变参数的方法,:_* 表示您想将集合成员作为可变参数传递。

与上面您提供的例子相对应的可变参数示例:

scala> fx("a", "b", "c")
a
b
c

你不能实现它——这是一种语言特性。在调用可变参数方法之外,它没有任何意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接