2012-06-22 20 views
5
scala> class A (s: String*) { val l: ListBuffer[String] = ListBuffer[String](s) } 
<console>:8: error: type mismatch; 
    found : String* 
    required: String 
    class A(s: String*) {val l: ListBuffer[String] = ListBuffer[String](s)} 

なぜコードListBuffer[String]("foo", "bar")が作業を行うstarを引数に渡して次のメソッドに渡す方法は?

GenericCompanion.scalaから方法apply

def apply[A](elems: A*): CC[A] = { ... } 

あるListBuffer [文字列]の適用方法に引数sを通過することは不可能です。しかし、String*であるsの文字列の引数リストを渡すことはできないようです。

答えて

9

あなたはsを展開するスカラ座を伝える必要があります:

ListBuffer[String](s: _*) 

あなたは、明示的な種類の必要はありません。

scala> class A (s: String*) { val l = ListBuffer(s: _*) } 
defined class A 
+0

私は同様のケースがあったし、あなたのアンパックソリューションは、しかし、問題を解決します暗黙の変換は「キックイン」しないので(タイプミスマッチエラーが発生する)解凍機能で暗黙の変換を強制することは可能ですか? –

関連する問題