2009-12-16 42 views
5

Cevabın oldukça basittir eminim, ama ben bu saplanıp:varargs bulmaca?

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) 
     ^

Nasıl bir 'Int *' inşa?

cevap

10

_*

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

evet argüman listesinin içine bir diziyi açmak kullanmak için! Bu çalışır! ... tür "zorlama" gibi bir şey hissediyor olsa da, – GClaramunt

+2

Eh, bu tip zorluyor. Doğru tür bir argüman listesidir, bir liste olan bir argüman değildir. Bu arada, herhangi bir dizinin yanı sıra bir diziye dönüştürülebilen herhangi bir tip için çalışır, böylece 'List' doğrudan geçebilirdi. Ayrıca simetrik. Xs match {case List (ys @ _ *) => ...} 'yapabilirdiniz. –