Scala占位符语法

mer*_*no1 4 scala

有些东西我不太明白希望有人可以解释一下..我有Seq [String]

val strDeps: Seq[String] = ...
Run Code Online (Sandbox Code Playgroud)

我尝试在使用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"))
                                                                    ^
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试排序而不做反向时它工作正常.

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

它没有占位符语法也可以正常工作

scala> print(strDeps.sortWith((a,b) => a.reverse.compareTo(b.reverse) < 0) mkString ("\n"))
// this works fine too
Run Code Online (Sandbox Code Playgroud)

Deb*_*ski 10

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

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


Dan*_*ral 8

compareTo(_)
Run Code Online (Sandbox Code Playgroud)

是部分应用的方法.它只是意味着"compareTo,但不应用第一个参数".请注意,_不是一个参数.相反,它表明没有参数.

compareTo(_.reverse)
Run Code Online (Sandbox Code Playgroud)

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