双变量参数列表

时间:2010-05-09 00:16:08

标签: scala scala-2.8 variadic-functions

我需要这样的东西:

class Node (left : Node*, right : Node*)

我理解这个签名的含糊不清。

有没有比以下更好的方法呢?

class Node (left : Array[Node, right : Array[Node])
val n = new Node (Array(n1, n2), Array(n3))

也许是这样的某种分隔符?

val n = new Node (n1, n2, Sep, n3)

3 个答案:

答案 0 :(得分:8)

您可以拥有多个参数列表,每个参数列表可能包含(或只是)一个重复参数:

scala> def m1(ints: Int*)(strs: String*): Int = ints.length + strs.length
dm1: (ints: Int*)(strs: String*)Int

scala> m1(1, 2, 3)("one", "two", "three")
res0: Int = 6

我在Scala 2.8 REPL中运行了这个。我不知道它在2.7中不起作用的原因。

答案 1 :(得分:6)

这有效:

class Node (left : Node*) (right : Node*)

斯卡拉很棒!

答案 2 :(得分:1)

我不相信你可以有多个varargs。你可能会做类似

的事情
class Node(left: Node*) {
  def apply(right: Node*) = ...

然后您可以创建new Node(n1,n2)(n3)