Programming in Scala में लेखकों ने लिखा है कि स्कैला का ==
फ़ंक्शन संदर्भ समानता के बजाय मूल्य समानता की तुलना करता है।ऐरे के लिए ऐरे का == फ़ंक्शन क्यों सही नहीं है (1,2) == ऐरे (1,2)?
इस सूची में अपेक्षा के अनुरूप काम करता है:
scala> List(1,2) == List(1,2)
res0: Boolean = true
हालांकि यह सरणियों पर काम नहीं करता:
scala> Array(1,2).sameElements(Array(1,2))
res2: Boolean = true
:
scala> Array(1,2) == Array(1,2)
res1: Boolean = false
लेखकों बजाय sameElements फ़ंक्शन का उपयोग करने की सलाह देते
एक स्पष्टीकरण के रूप में वे लिखते हैं:
हालांकि यह एक विसंगति की तरह प्रतीत हो सकता है, दो परिवर्तनीय डेटा संरचनाओं की समानता के स्पष्ट परीक्षण को प्रोत्साहित करने से भाषा डिजाइनरों के हिस्से पर एक रूढ़िवादी दृष्टिकोण है। लंबे समय तक, यह आपको अपने सशर्त परिणामों में अप्रत्याशित परिणामों से बचा लेना चाहिए।
इसका क्या मतलब है? किस तरह के अप्रत्याशित परिणाम क्या वे बात कर रहे हैं? अगर सरणी में एक ही स्थिति में समान तत्व होते हैं तो मैं वापस लौटने की तुलना में सरणी तुलना से और क्या उम्मीद कर सकता हूं? बराबर काम
List
पर काम क्यों करता है लेकिनArray
पर नहीं?मैं बराबर कार्यों को सरणी पर कैसे काम कर सकता हूं?
मैंने इस पुस्तक में भी इस स्पष्टीकरण को नोट किया है। यह सही नहीं है, नीचे अपना जवाब देखें। इस त्रुटि के अलावा, पुस्तक बहुत अच्छी है। –
कोई संक्षेप में बता सकता है कि क्या हो रहा है, "जावा संदर्भ समानता के रूप में सरणी पर मूल्य समानता को परिभाषित करता है, तत्व-दर-तत्व समानता नहीं।" –
संभावित डुप्लिकेट [ऐरे प्रकार के अजीब व्यवहार] (http://stackoverflow.com/questions/3213368/strange-behaviour-of-the-array-type) – Suma