5

こんにちは、私は scala のシンボル「_」を理解しようとしています。これはワイルドカードのように見えますが、特定のシナリオでその理由がわかりませんでした。

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

「_」は variable のように振る舞うべきですsが、なぜそうしないのでしょうか?

4

1 に答える 1

12

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

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

これは明らかに無効です。

于 2013-05-21T19:03:55.473 に答える