2012-04-09 13 views
7

मैं सिर्फ this question पढ़ सकते हैं और निम्नलिखित उद्धरण पर ठोकर खाई:क्या यह स्कैला में शून्य हो सकता है?

स्काला व्यवहार करता है == जैसे कि यह वर्ग Any में इस प्रकार के रूप में परिभाषित गया:

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

(null eq this) हिस्सा मुझे आश्चर्य बनाया: है वास्तव में शून्य पॉइंटर्स पर तरीकों को कॉल करना संभव है? स्केल में thisnull हो सकता है?

+1

आप कार्यान्वयन के साथ अमूर्तता को भ्रमित कर रहे हैं। संक्षेप में, कोई 'शून्य' पर विधियों को कॉल कर सकता है, जैसे '=='। स्पष्ट रूप से, JVM पर कार्यान्वयन, शून्य सूचक पर विधियों का आह्वान नहीं करता है। –

उत्तर

8

बाहर चेक Scala language specification, अर्थात् 6.3 शून्य मान अध्याय:

शून्य मान प्रकार scala.Null की है, और इस तरह हर संदर्भ प्रकार के साथ संगत है। यह संदर्भ मान को दर्शाता है जो विशेष "शून्य" ऑब्जेक्ट को संदर्भित करता है। इस प्रकार इस वस्तु वर्ग scala.AnyRef में तरीकों को लागू करता है:

eq(x) • और ==(x) वापसी अगर सही तर्क x भी "अशक्त" वस्तु है।

ne(x) और !=(x) तर्क सही है यदि तर्क x भी "शून्य" ऑब्जेक्ट नहीं है।

इसका मतलब है कि अर्थ की दृष्टि से जब आप null शाब्दिक या null कुछ आप वास्तव में एक विशेष scala.Null वर्ग की विधि की बात कर रहे के साथ शाब्दिक के साथ कुछ की तुलना करें। null उस कक्षा के लिए एक शॉर्टेंड के रूप में शाब्दिक व्यवहार करें।

बेशक कार्यान्वयन स्तर पर इसे अनुकूलित किया गया है और सामान्यnull का उपयोग किया जाता है।

3

nullNull कक्षा का एकमात्र उदाहरण है और यह एक मान्य वस्तु है। Null सभी संदर्भ प्रकारों का एक उप प्रकार है।

1

मैं स्कैला के लिए काफी नया हूं, लेकिन एकमात्र तरीका यह है कि मुझे लगता है कि यह संभव है कि "शून्य" स्वयं नल का एक उदाहरण है, और जावा में "शून्य" जैसे बिल्कुल विशेष मूल्य नहीं है ।

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

यह लेख मुझे इस एक सा बेहतर ढंग से समझने में मदद की।

संबंधित मुद्दे