Domanda

@lucastex pubblicato circa l'operatore Java Elvis, e ho provato qualcosa alla Scala per ottenere lo stesso effetto.

Ho appena convertito tutto in un nuovo tipo strutturale con l'operatore ?: che accetta un oggetto dello stesso tipo dell'argomento. Quindi dì:

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

Perché name?: " Lucas " ottiene " Lucas " e name.?:{"Lucas"} ottiene < code> Paulo ? Il nuovo tipo strutturale dovrebbe restituire il valore iniziale di qualsiasi cosa se non è null , ovvero " Paulo " nel codice sopra.

Sono un po 'confuso. Qualche spiegazione?

È stato utile?

Soluzione

Il tuo operatore termina in : , il che significa che legge da destra a sinistra quando è in notazione infissa. Ad esempio:

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

Tuttavia, tutti i metodi vengono letti da sinistra a destra in notazione punto. Quindi stai effettivamente applicando il tuo metodo a Lucas nella notazione infix e a name nella notazione dot.

A proposito, l'operatore Elvis era no accettato per l'inclusione in Java 7.

Altri suggerimenti

Per la cronaca (trovando questo thread durante la ricerca del seguente articolo ...), Daniel Spiewak (un altro famoso Daniel nel mondo della Scala ...) ha pubblicato un articolo su Implementazione di Groovy & # 8217; s Elvis Operator in Scala .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top