2011-12-01 14 views
5

tür yöntemleri düşünün:Scala'da başka bir tane eklerken varyantik argümanlar nasıl geçilir?

def clearlnOut(coll : Any*) 
{ 
    clearOut(coll:_*,"\n") // error 
} 
def clearOut(coll : Any*) 
{ 
    ... 

derleyici diyor:

error: no `: _*' annotation allowed here (such annotations are only allowed in arguments to *-parameters)

Şimdi şaşkın. Değişken argümanları kullanmanın açık bir örneği, böylelikle böyle bir "koleksiyon" u doğru bir şekilde nasıl geçebiliriz?

+0

Bu hak eden bir/r/lolscala subreddit. –

cevap

6

bu deneyin:

def clearlnOut(coll : Any*) { 
    clearOut(coll ++ "\n") 
} 

GÜNCELLEME: @Rex Kerr önerdiği çok daha iyi sürümü (aşağıdaki yorum bakın):

def clearlnOut(coll : Any*) { 
    clearOut((coll :+ "\n"): _*) 
} 
+0

Güzel, teşekkürler. Değişken argümanların (geçerken) ortaya çıkması gerektiğini düşündüm. – greenoldman

+4

Gerçekten gerçekten istiyor musun '' ''? Bu, bir karakter olarak '\ n' ekleyecektir (ve üç ayrı bir karakter öğesi olarak" foo "ifadesini ekleyecektir). Gibi görünüyor: + 'gitmek için yoldur. Ayrıca, buna ': _ * 'eklemek istemiyor musunuz? Aksi takdirde, ekstra bir yuvalama seviyesi olan bir "Seq [Seq [Any]]' a sahip olursunuz. –

+0

@RexKerr: Önerileriniz için teşekkür ederim, kesinlikle haklısınız. Çözümünüzü yanıtıma ekledim, ancak bunun için size tam bir kredi vermek için muhtemelen ayrı bir cevap eklemelisiniz. –