让我们为这个问题创建一个值:
val a = 1 :: Nil
Run Code Online (Sandbox Code Playgroud)
现在,我可以证明匿名函数可以用这样的简写形式编写:
a.map(_*2)
Run Code Online (Sandbox Code Playgroud)
是否有可能写出这个功能的简写?:
a.map((x) => x)
Run Code Online (Sandbox Code Playgroud)
我的解决方案不起作用:
a.map(_)
Run Code Online (Sandbox Code Playgroud) 为什么这不起作用:
List(true,false).filter(_).size
Run Code Online (Sandbox Code Playgroud)
错误说:
<console>:8: error: missing parameter type for expanded function
((x$1) => List(true, false).filter(x$1).size)
List(true,false).filter(_).size
^
Run Code Online (Sandbox Code Playgroud)
但以下作品(对我来说看起来一样):
List(true,false).filter(a => a).size
Run Code Online (Sandbox Code Playgroud)
我正在使用Scala 2.9.0.1.
在网上看了一些例子之后,我意识到只有一个arg时,有一种方法可以编写一个没有下划线的匿名函数.另外,我正在试验List上的"span"方法,我从来不知道它存在.无论如何,这是我的REPL会议:
scala> val nums = List(1, 2, 3, 4, 5)
nums: List[Int] = List(1, 2, 3, 4, 5)
scala> nums span (_ != 3)
res0: (List[Int], List[Int]) = (List(1, 2),List(3, 4, 5))
scala> nums span (3 !=)
res1: (List[Int], List[Int]) = (List(1, 2),List(3, 4, 5))
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是当我尝试使用"小于"运算符时:
scala> nums span (_ < 3)
res2: (List[Int], List[Int]) = (List(1, 2),List(3, 4, 5))
scala> nums span (3 <)
res3: (List[Int], List[Int]) = (List(),List(1, 2, 3, 4, 5))
Run Code Online (Sandbox Code Playgroud)
为什么这表现不同?