2010-05-09 4 views
4

je besoin de quelque chose comme ceci:double liste variable d'arguments

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

Je comprends l'ambiguïté de cette signature.

Y a-t-il un moyen de contourner mieux que ce qui suit?

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

Peut-être une sorte de séparateur comme ça?

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

Répondre

8

Vous pouvez avoir plusieurs listes d'arguments, dont chacun peut avoir (ou être juste) un paramètre répété-args:

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 

j'ai couru cela dans la Scala 2.8 REPL. Je ne sais pas pourquoi cela ne fonctionnerait pas en 2.7, désinvolte.

+1

@ Łukasz Lew: Je n'avais que 9 secondes derrière vous! –

+0

Donc, je vais vous donner la grande coche verte de la réponse :) –

1

Je ne crois pas que vous pouvez avoir plusieurs varargs. Vous pourriez peut-être faire quelque chose comme

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

et vous pouvez créer new Node(n1,n2)(n3)

6

Cela fonctionne:

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

Scala est grande!

Questions connexes