Scala Неявные преобразования: 2 способа вызова - PullRequest
0 голосов
/ 22 октября 2009

@ lucastex опубликовал об операторе Java Elvis, и я попробовал кое-что в Scala, чтобы получить тот же эффект.

Я только что преобразовал все в новый тип структуры с помощью оператора ?:, принимающего объект того же типа, что и аргумент. Так скажи:

implicit def toRockStar[B](v : B) = new { 
                            def ?:(opt: => B) = if (v == null) opt else v}
val name: String = "Paulo" // example

Почему name ?: "Lucas" получает "Lucas", а name.?:{"Lucas"} получает Paulo? Предполагается, что новый тип структуры возвращает начальное значение чего-либо, если оно не равно нулю , то есть "Paulo" в приведенном выше коде.

Я немного растерялся. Любое объяснение?

Ответы [ 2 ]

6 голосов
/ 22 октября 2009

Ваш оператор оканчивается на :, что означает, что он читается справа налево в инфиксной записи. Например:

scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true

Все методы читаются слева направо в точечной нотации. Таким образом, вы фактически применяете свой метод к Lucas в нотации инфикса и к name в нотации точки.

Кстати, оператор Элвиса был не принят для включения в Java 7.

2 голосов
/ 25 марта 2011

Для справки (найдя эту ветку при поиске в следующей статье ...), Даниэль Спивак (еще один знаменитый Даниэль в мире Scala ...) опубликовал статью о Реализация оператора Elvis Groovy в Scala .

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