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?

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top