2009-12-16 33 views
5

Tôi chắc chắn câu trả lời là khá đơn giản, nhưng tôi đã bị mắc kẹt ở đây:varargs câu đố?

Welcome to Scala version 2.7.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_14). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> def f(x:Int*)=0 
f: (Int*)Int 

scala> val xs:Seq[Int]=1::2::3::4::Nil 
xs: Seq[Int] = List(1, 2, 3, 4) 

scala> f (xs) 
<console>:7: error: type mismatch; 
found : Seq[Int] 
required: Int 
     f (xs) 
     ^

Làm thế nào tôi xây dựng một 'Int *'?

Trả lời

10

Để giải nén một chuỗi vào danh sách đối số, sử dụng _*

scala> f(xs: _*) 
res1: Int = 0 
+0

có! hoạt động! ... cảm thấy một chút như "buộc" loại, mặc dù – GClaramunt

+2

Vâng, nó đang buộc loại. Loại chính xác là danh sách đối số, không phải là đối số là danh sách. Bằng cách này, nó hoạt động cho bất kỳ loại chuỗi nào, cũng như bất kỳ loại nào có thể được chuyển đổi thành một chuỗi, vì vậy bạn có thể đã chuyển trực tiếp 'Danh sách'. Ngoài ra, nó là đối xứng. Bạn có thể làm 'xs match {case List (ys @ _ *) => ...}'. –

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