2016-07-15 16 views
2

Wenn wir eine Liste an eine Methode übergeben, die eine variable Anzahl von Argumenten akzeptiert, funktioniert es.Scala Klassenkonstruktor mit variabler Anzahl von Argumenten

val testList = List("a", "b", "c") 

def testMethod(str: String*): Seq[String] = str 

testMethod(testList) // outputs WrappedArray(List("a", "b", "c")) 

Aber wenn wir in einer Liste zu einer Klasse Konstruktor übergeben, die eine variable Anzahl von Argumenten nehmen, bekommen wir einen Typfehler.

val testList = List("a", "b", "c") 

class TestClass(str: String*) 

val t = new TestClass(testList) 

// error: type mismatch 

// found: List[String] 

// required: [String] 

Irgendeine Idee, wie wir das beheben können?

Antwort

3

Es funktioniert nicht in beiden Fällen (beachten Sie die unerwünschte WrappedArray im ersten Fall). Um eine Sequenz als Liste mit variablen Argumenten zu übergeben, müssen Sie sie als solche behandeln. Die Syntax dafür ist gleich. Im ersten Fall:

testMethod(testList: _*) 

und im zweiten Fall:

val t = new testClass(testList: _*) 

Sie diese Notation in ähnlicher Weise mit variabler Argumenten Syntax interpretieren kann, wobei der einzige Unterschied hier, dass der Typ ist nicht explizit angegeben (Unterstrich wird stattdessen verwendet).