Question

@lucastex posté à propos de l'opérateur Java Elvis, et j'ai essayé quelque chose dans Scala pour obtenir le même effet.

Je viens de tout convertir en un nouveau type de structure avec l'opérateur ?: prenant un objet du même type en argument. Alors dis:

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

Pourquoi nom?: "Lucas" obtient "Lucas" et nom.?: {} obtient < code> Paulo ? Le nouveau type de structure est censé renvoyer la valeur initiale de quoi que ce soit s'il n'est pas null , c'est-à-dire "Paulo" dans le code ci-dessus.

Je suis un peu confus. Une explication?

Était-ce utile?

La solution

Votre opérateur se termine par : , ce qui signifie qu'il se lit de droite à gauche en notation infixe. Par exemple:

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

Toutes les méthodes sont lues de gauche à droite en notation par points. Vous appliquez donc votre méthode à Lucas dans la notation infixe et à nom dans la notation pointée.

A propos, l'opérateur Elvis était non accepté pour inclusion dans Java 7.

Autres conseils

Pour mémoire (pour retrouver ce fil lors de la recherche de l'article suivant ...), Daniel Spiewak (un autre célèbre Daniel dans le monde de Scala ...) a publié un article sur Implémentation de l'opérateur Elvis de Groovy à Scala .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top