Scala Неявные преобразования: 2 способа вызова
Вопрос
@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 "
в приведенном выше коде. Р>
Я немного смущен. Любое объяснение?
Решение
Ваш оператор оканчивается на :
, что означает, что он читается справа налево в инфиксной записи. Например:
scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true
Все методы читаются слева направо в точечной нотации. Таким образом, вы на самом деле применяете свой метод к Lucas
в инфиксной нотации и к name
в точечной нотации.
Кстати, оператор Элвиса не был не принято для включения в Java 7.
Другие советы
Для справки (найдя эту ветку при поиске в следующей статье ...), Даниэль Спивак (еще один известный Даниэль в мире Scala ...) опубликовал статью о Реализация Groovy-оператора Elvis в Scala .