Scala Implizite convertions: 2 Wege aufrufen
Frage
geschrieben über der Java Elvis-Operator, und ich versuchte, etwas in Scala den gleichen Effekt zu erzielen.
Ich habe gerade alles zu einem neuen Strukturtyp mit dem ?:
Operator konvertiert ein Objekt des gleichen Typs als Argument nehmen. So Sprich:
implicit def toRockStar[B](v : B) = new {
def ?:(opt: => B) = if (v == null) opt else v}
val name: String = "Paulo" // example
Warum name ?: "Lucas"
bekommt "Lucas"
und name.?:{"Lucas"}
Paulo
bekommt? Der neue Konstruktionstyp sollte den Anfangswert von etwas zurück, wenn es ist nicht null , das heißt, "Paulo"
in dem obigen Code.
Ich bin ein wenig verwirrt. Jede Erklärung?
Lösung
Ihre Betreiber endet in :
, was bedeutet, liest es richtig, wenn in Infixschreibweise nach links. Zum Beispiel:
scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true
Alle Methoden read in Punktnotation links nach rechts, though. Sie sind also Ihre Methode tatsächlich die Anwendung in der Infixschreibweise Lucas
, und in der Punktnotation name
.
Übrigens war der Elvis Operator nicht akzeptiert für die Aufnahme in Java 7.
Andere Tipps
Für das Protokoll (die Suche nach diesem Thread während der Suche in den folgenden Artikel zurück ...), Daniel Spiewak (ebenfalls ein berühmter Daniel in der Scala Welt ...) geschrieben einen Artikel über Umsetzung Groovy Elvis Operator in Scala .