2011-11-24 67 views
4

有东西,我不是很了解希望有人能提供一些线索.. 我有序号[字符串]斯卡拉占位符语法

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 
+1

另请参见:[Underscore in List.filter](http://stackoverflow.com/questions/7695270)。一样的问题。 –

回答

10

_只扩展到尽可能小的范围内正常工作。

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

8
compareTo(_) 

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

compareTo(_.reverse) 

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