Scala Conversiones implícitas: 2 formas de invocar
Pregunta
@lucastex publicado sobre el operador de Java Elvis, e intenté algo en Scala para obtener el mismo efecto.
Acabo de convertir todo a un nuevo Tipo estructural con el operador ?:
tomando un objeto del mismo tipo como argumento. Entonces diga:
implicit def toRockStar[B](v : B) = new {
def ?:(opt: => B) = if (v == null) opt else v}
val name: String = "Paulo" // example
¿Por qué name?: " Lucas "
obtiene " Lucas "
y name.?:{"Lucas"}
obtiene < code> Paulo ? Se supone que el nuevo Tipo estructural devolverá el valor inicial de cualquier cosa si no es nulo , es decir, " Paulo "
en el código anterior.
Estoy un poco confundido. ¿Alguna explicación?
Solución
Su operador termina en :
, lo que significa que lee de derecha a izquierda cuando está en notación infija. Por ejemplo:
scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true
Sin embargo, todos los métodos se leen de izquierda a derecha en notación de puntos. Entonces, en realidad está aplicando su método a Lucas
en la notación infija, y a name
en la notación de punto.
Por cierto, el operador de Elvis fue no aceptado para su inclusión en Java 7.
Otros consejos
Para el registro (encontrar este hilo mientras busca el siguiente artículo ...), Daniel Spiewak (otro famoso Daniel en el mundo Scala ...) publicó un artículo sobre Implementando Groovy & # 8217; s Elvis Operator en Scala .