2012-06-22 27 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)} 

nedenYıldızla argüman nasıl bir sonraki yönteme geçilir?

kod ListBuffer[String]("foo", "bar") çalışır (GenericCompanion.scala den Yöntem apply)

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

olan ListBuffer [dize] yapılır yönteme bağımsız değişken s geçmek mümkün değildir. Ama ben String* da s dizeleri argüman listesi içinden geçemez gibi görünüyor.

cevap

9

Sen s açmak için Scala söylemek gerekir:

ListBuffer[String](s: _*) 

Ayrıca açık türlerini gerekmez:

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

Ben benzer bir durum vardı ve açmak çözüm sorunu çözdü, ancak örtük dönüştürme "tekme" (böylece tür uyumsuzluğu hatası alır) olmaz. Paket açma özelliği ile örtük dönüştürme zorlamak mümkün mü? –

İlgili konular