2013-05-21 16 views
5

Ciao a tutti sto cercando di capire il simbolo "_" in scala, sembra un carattere jolly ma non ho capito perché nel dato scenario.perché il segnaposto scala non funziona

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(_) 
    } 
) 

"_" dovrebbe agire come la variabile s, ma perché non lo fa?

+0

Sono del 99,8973% sicuro che '_' funzioni correttamente. È come lo stai usando, o cosa ti aspetti da questo, questo è il problema. – cHao

+4

Dovresti leggere http://stackoverflow.com/questions/8000903 tra le altre cose. Stai mescolando usi di underscore, credo. (Inoltre, il carattere di sottolineatura può essere usato esattamente una volta per variabile, un secondo trattino di sottolineatura cerca di legarsi a una seconda variabile, non la prima una seconda volta. Quindi: 'foreach {_ + 1}' è okay, 'foreach {_ * _ } 'is not. Se è necessario fare riferimento alla stessa variabile più volte, denominarlo:' foreach {x => x * x} ').) –

risposta

12

I caratteri jolly in funzioni anonime vengono espansi in modo che n-esimo viene trattato come n-esimo argomento. Il modo in cui lo stai usando fa sì che lo compilatore di scala pensi di avere qualcosa come

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

Che è ovviamente non valido.

+6

Analizza a' l.foreach ({if ((x) = > x == "a") {(y) => print (y)}}) ', comunque. – Debilski

Problemi correlati