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

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

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

compareTo(_)

是一种部分应用的方法。它的意思只是"compareTo,但不应用第一个参数"。请注意,_而不是参数。相反,它指示参数的不存在

compareTo(_.reverse)

是一个以匿名函数为参数的方法,参数为_.reverse。这转化为x => x.reverse

最新更新