Scala Неявные преобразования: 2 способа вызова

StackOverflow https://stackoverflow.com/questions/1609307

  •  05-07-2019
  •  | 
  •  

Вопрос

@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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top