单个arg匿名函数(避免下划线)的简明表示法不能按预期工作

Pet*_*mas 3 scala

在网上看了一些例子之后,我意识到只有一个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)

为什么这表现不同?

inc*_*rop 10

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)

3 <是一个快捷方式3 < _,它从方法调用创建一个部分应用的函数.

  • 查看[本教程]第7步的`args.foreach(println)`示例(http://www.artima.com/scalazine/articles/steps.html) (2认同)