2014-09-12 47 views
13

değişkenine sahip bir işleve parametre olarak geçirilmesi Örneğin or adlı bir işleve sahibim;Bir Listenin değişken öğeleri

List(X, Y, Z) 

Şimdi ne yapmam gerekiyor

or(func(X), func(Y), func(Z)) 

gibi çağrı or Ve beklendiği gibi listenin uzunluğu değişebilir:

or(filters: FilterDefinition*) 

Sonra bir liste var.

Scala'da bunu yapmanın en iyi yolu nedir?

def printme(s: String*) = s.foreach(println) 


scala> printme(List("a","b","c")) 

<console>:9: error: type mismatch; 
found : List[String] 
required: String 
       printme(List(a,b,c)) 

Gerçekten gerekenler

+3

Tam olarak aynı soru değil ama yanıtın anahtarı olan ': _ *' notasyonunu verir (sadece 'list.map (func) 'yapabileceğinizi varsayarak): http://stackoverflow.com/questions/ 1008783 –

+0

Tüm liste öğelerini iletir ve hepsini çağrılan işleve işlersek tion, daha sonra sadece listeye işlevin geçirilmesiyle yapılabilir ve fonksiyon, özel sözdizimine gerek olmadan, elemanlar aracılığıyla yineleyebilir: _ *, değil mi? Ya da yanlış olabilirim, bu kullanım için iyi bir sebep var mı? – user3366706

+0

@ user3366706, bu şeyler yapmak için daha geleneksel bir yaklaşım olurdu, evet. Benim için bu, argüman değişken sayısı ile oluşturulan argümanı işlev argümanı olarak beklenen bir DSL ile uğraşırken inanılmaz derecede kullanışlı oldu. – Ashesh

cevap

32

Bu örnekte bir göz atın, ben String türünün vargs alan bir fonksiyon PrintMe tanımlayacaktır :_* operatörü

scala> val mylist = List("1","2","3") 
scala> printme(mylist:_*) 
1 
2 
3 
tartışırken liste un-pack
+0

Ayrıca sınıf ile çalışır: 'case class Örnek Sınıf (d: Double *)' –

İlgili konular