2012-04-09 16 views
7

Ich habe gerade gelesen this question und stolperte über das folgende Zitat:Kann das in Scala null sein?

Scala behandelt ==, als ob es in der Klasse definiert wurden Any wie folgt:

final def == (that: Any): Boolean = 
    if (null eq this) (null eq that) else (this equals that) 

Der (null eq this) Teil mir geschaffenes Wunder: Ist es tatsächlich möglich, Methoden auf Nullzeiger aufzurufen? Kann thisnull in Scala sein?

+1

Sie verwechseln die Abstraktion mit der Implementierung. Abstrakt kann man Methoden auf 'null' aufrufen, zB '=='. Die Implementierung in der JVM ruft offensichtlich keine Methoden für einen Nullzeiger auf. –

Antwort

8

Schauen Sie sich die Scala language specification, nämlich 6.3 Der Nullwert Kapitel:

Der Nullwert ist vom Typ scala.Null und ist somit kompatibel mit jeder Referenz Typ. Er bezeichnet einen Referenzwert, der sich auf ein spezielles Objekt "null" bezieht. Diese Aufgabe implementiert Methoden in der Klasse scala.AnyRef wie folgt:

eq(x) und ==(x) return true, wenn das Argument x ist auch das „Null“ Objekt.

ne(x) und !=(x) geben Sie true zurück, wenn das Argument x nicht auch das Objekt "null" ist.

Das bedeutet, dass semantisch, wenn Sie etwas mit null wörtlichen oder null wörtlichen mit etwas vergleichen Sie tatsächlich mit Bezug auf Verfahren einer speziellen scala.Null Klasse. Behandle null Literal als Kurzschrift für diese Klasse.

Natürlich in der Implementierungsebene ist es optimiert und gewöhnlichennull wird verwendet.

3

null ist die einzige Instanz der Null Klasse und es ist ein gültiges Objekt. Null ist ein Subtyp aller Referenztypen.

1

Ich bin ziemlich neu in Scala, aber die einzige Möglichkeit, die ich als möglich sehe, ist aufgrund der Tatsache, dass "Null" selbst eine Instanz von Null ist, und nicht genau ein spezieller Wert wie "null" in Java .

http://blog.sanaulla.info/2009/07/12/nothingness/

Dieser Artikel hat mir geholfen, diese ein bisschen besser zu verstehen.

Verwandte Themen