Синтаксис Scala-заполнителя - PullRequest
4 голосов
/ 24 ноября 2011

Есть кое-что, что я не совсем понимаю, надеюсь, что кто-то может пролить немного света .. У меня есть 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 ]

10 голосов
/ 24 ноября 2011

_ расширяется только до минимально возможной области.

Внутренняя часть _.reverse уже интерпретируется как x => x.reverse, поэтому параметр отсутствует внутри sortWith.

8 голосов
/ 25 ноября 2011
compareTo(_)

Это частично применяемый метод. Это просто означает «сравнить, но без применения первого параметра». Обратите внимание, что _ является , а не параметром. Скорее, это указывает на отсутствие параметра.

compareTo(_.reverse)

Это метод, принимающий анонимную функцию в качестве параметра, параметр _.reverse. Это означает x => x.reverse.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...