2016-12-16 1 views
0

I „Programming in Scala“ Buch lese, erwähnt == ist final in Klasse Any, die Unterklasse bedeuten nicht in der Lage ist, es zu überschreiben, so dass, wenn ich dieses Beispiel sehen List(1,2) == List(1,2), ging ich die API doc zu finden, I couldn‘ t finden Sie die Methode ==, wie Scala diese Methode in List eigentlich definieren? Warum ist es nicht im API-Dokument?Wo ist "==" Methode in Scala List API?

Wenn es nicht von List Klasse überschrieben wird, wie kann der Vergleich auf List Element anstelle von Objektreferenz basieren?

+0

Scheinen, wie ich eine dumme Frage gestellt haben. Ich dachte 'val a = List (1,2)' und 'val b = List (1,2)' hat dieselbe Objektreferenz, weil sie wie String unveränderlich sind. – GMsoF

Antwort

2

== ist eine endgültige Methode in Klasse Any, und es ruft .equals.

F: Wie Scala diese Methode in List tatsächlich definieren?

A: Jede Klasse in einer Scala-Ausführungsumgebung erbt direkt oder indirekt von Any Klasse.

Referenzgleichheit in Scala ist .

1

== ist in der Klasse final Jede und Any ist die Wurzel in der Hierarchie scala Klasse. Jede Klasse in scala wird von Any Standard erweitert. wenn also die == in scala anrufen, wird es Any== Methode zuerst aufrufen. und für die Any== defnition:

if (x eq null), dass eq null sonst x.equals (das)

See: Any Class