41
Jak testujesz równanie odniesienia w Scali?Scala reference equality
val x = new Obj
val y = x
x.referenceEquals(y) // evaluates to true
Jak testujesz równanie odniesienia w Scali?Scala reference equality
val x = new Obj
val y = x
x.referenceEquals(y) // evaluates to true
Funkcja szukasz jest eq
, który jest członkiem AnyRef:
val x = new Obj
val y = x
x eq y // evaluates to true
x ne y // evaluates to false
Dziękujemy! Dla przypomnienia, jest to udokumentowane tutaj: http://www.scala-lang.org/api/current/scala/AnyRef.html –
I jego odwrotnością jest 'ne'. Najprawdopodobniej będziesz chciał użyć go w notacji infiksowej. Zauważ, że 'eq',' ne', '==' i '! =' Nie wyrzucają 'NullPointerException', gdy obiekt docelowy ma wartość NULL, nawet jeśli może wyglądać tak, jak mógłby (szczególnie w notacji bez infiksu). –
@Jean: Jeśli dodałem wiersz "val z = null" (bardzo zła forma Scala) do powyższego, czy mówisz, że z.eq (x) nie rzuci wyjątku, mimo że z jest zerowe? Byłem taki sceptyczny, poszedłem na http://www.simplyscala.com/ (dostęp online do REPL) i wypróbowałem go interaktywnie. I masz rację. To wspaniale i na pewno lepsze niż wyrzucanie NPE przez Javę. Tyvm do wyjaśnienia. – chaotic3quilibrium