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?

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top