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

Tại sao nó không thể vượt qua đối số s vào áp dụng phương pháp ListBuffer [Chuỗi] đó làLàm thế nào để chuyển đối số với dấu sao đến phương thức tiếp theo?

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

(Phương pháp apply từ GenericCompanion.scala)

ListBuffer[String]("foo", "bar") làm việc. Nhưng có vẻ như tôi không thể vượt qua danh sách đối số của các chuỗi từ s cũng là String*.

Trả lời

9

Bạn cần phải cho Scala để giải nén s:

ListBuffer[String](s: _*) 

Bạn cũng không cần các loại rõ ràng:

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

Tôi có trường hợp tương tự và giải pháp giải nén bạn giải quyết vấn đề, tuy nhiên chuyển đổi ngầm không "kick in" (vì vậy tôi nhận được lỗi không khớp loại). Có thể ép buộc chuyển đổi ngầm định bằng tính năng giải nén không? –

Các vấn đề liên quan