2013-05-21 16 views
5

こんにちは皆、私はスカラーでシンボル "_"を理解しようとしていますが、ワイルドカードのように見えますが、理由は分かりません。スカラープレースホルダーが機能しない理由

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

は "_" 変数sのように行動しなければならないが、それはしていませんなぜですか?

+0

私は約99.8973%ですが、 '_'はうまく動作します。それはあなたがそれをどのように使っているのか、それを期待しているのか、それが問題です。 – cHao

+4

他にも、http://stackoverflow.com/questions/8000903をお読みください。あなたはアンダースコアを混ぜて使っていると思います。 (また、アンダースコアは変数ごとに1回だけ使用することができ、2番目のアンダースコアは2番目の変数にバインドしようとしますが、2番目の変数にバインドしようとしません:foreach {_ + 1} 'ok '、foreach {同じ変数を複数回参照する必要がある場合は、 'foreach {x => x * x}'))。 –

答えて

12

匿名関数のワイルドカードは、n番目の引数がn番目の引数として扱われるように展開されます。あなたがそれを使用している方法は、あなたが実際に何かを持っていると考えていることをスカラーコンパイラに見せます。明らかに無効なのは明らかです。

+6

'l.foreach({if((x)= > x == "a"){(y)=> print(y)}}) 'となります。 – Debilski

関連する問題