为什么scala占位符不起作用

时间:2013-05-21 18:50:05

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

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

1 个答案:

答案 0 :(得分:12)

匿名函数中的通配符以第n个_被视为第n个参数的方式展开。你使用它的方式使得scala编译器认为你实际上有像

这样的东西
l.foreach((x,y) =>
    if(x=="a"){
      print(y)
    }
)

这显然无效。