मैं स्कैला में प्रोग्रामिंग के माध्यम से पढ़ रहा हूं। इसे कहते हैं:स्कैला: क्या == डिफ़ॉल्ट बराबर है?
आप
equals
विधि है, जो हमेशा वर्गAny
से विरासत में मिली है अधिभावी द्वारा नए प्रकार के लिए==
के व्यवहार को फिर से परिभाषित कर सकते हैं। विरासत मेंequals
, जो ओवरराइड होने तक प्रभावी होता है, ऑब्जेक्ट पहचान है, जैसा कि जावा में है। तोequals
(और इसके साथ,==
) डिफ़ॉल्ट रूप सेeq
जैसा ही है, लेकिन आप परिभाषित कक्षाओं मेंequals
विधि को ओवरराइड करके अपना व्यवहार बदल सकते हैं।==
को सीधे ओवरराइड करना संभव नहीं है, क्योंकि इसे कक्षाAny
में अंतिम विधि के रूप में परिभाषित किया गया है। यही है, स्काला==
व्यवहार करता है के रूप में अगर वर्गAny
में इस प्रकार के रूप में परिभाषित किया गया था:final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
लेकिन यह मैं क्या स्केला 2.9.1, यह की तरह लगता है जहां में दिखाई दे रही है साथ jibing नहीं है:
==
डिफ़ॉल्टequals
- को मैं
==
सीधे (बिना किसी शिकायत के संकलक से, कोईoverride
आवश्यक) ओवरराइड कर सकते हैं नहीं लगता है।
तो यह की तरह या तो मुझे लगता है: मैं इसे गलत कर रहा हूँ
-
% scala Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). Type in expressions to have them evaluated. Type :help for more information. scala> Rational(1) == Rational(1) res0: Boolean = false scala> Rational(1) equals Rational(1) res1: Boolean = true
देता है या मैं के पुराने संस्करण का बाहर पढ़ रहा हूँ किताब, और चीजें बदल गई हैं।
क्या चल रहा है?
बहुत बढ़िया कुछ के रूप में व्यवहार जावा (और स्काला पुस्तकालय) के साथ संगत है, तो आप को फिर से लिखने की जरूरत होगी के बराबर होती है पाने के लिए। यह हर बार जब मैं जेवीएम भूमि पर लौटता हूं तो मुझे काटता है। मैं इसे जल्दी या बाद में सीखूंगा। क्या वैसे भी मैं 'एक मैच' छोड़ सकता हूं और बस एक अनाम कार्य को 'बराबर' असाइन कर सकता हूं? 'डीफ़ बराबर ओवरराइड करें: कोई भी => बूलियन = {केस आर: तर्कसंगत/* ... * /} 'काफी काम नहीं करता है ... – rampion
@ रैंपियन - नहीं, आपको बिल्कुल प्रकार के हस्ताक्षर से मिलान करना होगा। 'बराबर: कोई भी => बूलियन 'का अर्थ है कि यह एक फ़ंक्शन देता है (यानी' फंक्शन 1 [कोई भी, बूलियन] 'वर्ग का एक उदाहरण)। भले ही यह कुछ अर्थों में अवधारणात्मक रूप से समतुल्य है, यह एक ही विधि नहीं है, इसलिए यह काम नहीं करेगा। –