为什么scala占位符不起作用

Bru*_*uno 5 scala

大家好,我正在尝试理解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(_)
    }
  )
Run Code Online (Sandbox Code Playgroud)

"_"应该像变量一样s,但为什么不呢?

om-*_*nom 12

匿名函数中的通配符以第n个_被视为第n个参数的方式扩展.你使用它的方式使得scala编译器认为你实际上有类似的东西

l.foreach((x,y) =>
    if(x=="a"){
      print(y)
    }
)
Run Code Online (Sandbox Code Playgroud)

这显然是无效的.

  • 它解析为`l.foreach({if((x)=> x =="a"){(y)=> print(y)}})`. (6认同)