2013-05-21 10 views
5
Merhaba scala içinde "_" sembolü anlamaya çalışıyorum millet, bir joker gibi görünüyor

çalışmıyor ama neden verilen senaryoda anlamadım neden. neden değildirscala tutucu

var l = List("a","b" ,"c") 
    // Works "s" works as a variable. 
    l.foreach(s => 
    if(s=="a"){ 
     print(s) 
    } 
    ) 

    // Works _ takes the place of "s" 
    l.foreach(
    print(_) 
    ) 

    //So the doubt is whether "_" is a wildcard that does not work well. 

    l.foreach(
    if(_=="a"){ 
     print(_) 
    } 
) 

"_" değişken s gibi hareket kaplaması gerekir? adsız işlevlerde

+0

ben _' gayet güzel çalışıyor 'Bu konuda 99,8973% eminim. Bunu nasıl kullanıyorsunuz, ya da ne bekliyorsunuz, sorun bu. – cHao

+4

diğer şeyler arasında http://stackoverflow.com/questions/8000903 okumalısınız. Alt çizgiler kullanmıyorsunuz sanırım. (Aynı zamanda, her bir değişken için sadece bir kere kullanılabilir alt çizgi, bir ikinci çizgi Böylece bir değişken değil, ilk, ikinci bir kez bağlanan çalışır. 'Foreach {_ + 1} ', tamam' foreach {_ * _ } 'değildir sen, aynı değişken birden çok kez ifade etmek adına gerekirse o:..' foreach {x => x * x} ')) –

cevap

12

Yabankartları _ n'inci argüman olarak n'inci tedavi edilir bir şekilde genişletilir. kullandıysanız bunu yolu scala derleyici sen aslında açıkça geçersiz

l.foreach((x,y) => 
    if(x=="a"){ 
     print(y) 
    } 
) 

gibi bir şey var düşündürüyor.

+6

o l.foreach' üzere ayrıştırır ({if ((x) = > x == "a") {(y) => print (y)}}) ', yine de. – Debilski