Scala占位符语法

时间:2011-11-24 16:55:58

标签: scala

有些事情我可以非常理解希望有人可以解释一下...... 我有Seq [String]

val strDeps: Seq[String] = ...

我试着在使用sortWith方法的反面对它进行排序,我得到以下错误。

scala> print(strDeps.sortWith(_.reverse.compareTo(_.reverse) < 0) mkString ("\n"))
<console>:15: error: wrong number of parameters; expected = 2
              print(strDeps.sortWith(_.reverse.compareTo(_.reverse) < 0) mkString ("\n"))
                                                                    ^

但是当我尝试对它进行排序而不做反向时,它可以正常工作。

scala> print(strDeps.sortWith(_.compareTo(_) < 0) mkString ("\n"))
// this is fine

如果没有占位符语法

,它也能正常工作
scala> print(strDeps.sortWith((a,b) => a.reverse.compareTo(b.reverse) < 0) mkString ("\n"))
// this works fine too

2 个答案:

答案 0 :(得分:10)

_仅扩展到可能的最小范围。

内部_.reverse部分已被解释为x => x.reverse,因此sortWith内缺少参数。

答案 1 :(得分:8)

compareTo(_)

是部分应用的方法。它只是意味着“compareTo,但不应用第一个参数”。请注意,_ 不是参数。相反,它表示参数的缺席

compareTo(_.reverse)

是一种将匿名函数作为参数的方法,参数为_.reverse。这意味着x => x.reverse