2012-10-26 11 views
5

यदि सामान्य प्रकार की तुलना null (और केवल null के साथ) की तुलना में की जाती है, तो यह संकलक को प्रकार को कम करने योग्य (जो ठीक है) और समान समझा जा सकता है।एक शून्य जांच क्यों F # में समानता बाधा का कारण बनती है?

उत्तरार्द्ध क्यों? ऐसा लगता है कि null के साथ तुलना करना ठीक प्रकार के लिए ठीक होना चाहिए, लेकिन समानता का समर्थन नहीं करते हैं।

मैं जानता हूँ कि मैं Unchecked.equals उपयोग कर सकते हैं बस नल बाधा प्राप्त करने के लिए, बस अगर मैं कुछ स्पष्ट कारण है कि ((=) null) एक equatable तर्क की जरूरत है याद कर रहा हूँ सोच रहा।

उत्तर

10

(=) ऑपरेटर के पास 'a -> 'a -> bool when 'a : equality है। इस प्रकार ऑपरेटर का कोई भी उपयोग समानता का समर्थन करने के लिए अपने तर्कों के प्रकार को बाधित करेगा। हालांकि यह सच है कि जब आप शून्य शब्दशः के खिलाफ तुलना कर रहे हैं तो यह तकनीकी रूप से एक अनावश्यक प्रतिबंध है, मुझे लगता है कि यह उचित है कि संकलक सिर्फ एक सामान्य मामले के रूप में इसका इलाज करने के बजाय अपनी सामान्य अनुमान प्रक्रिया का उपयोग करता है।

ध्यान दें कि यदि आप अतिरिक्त बाधाएं आपत्तिजनक हैं तो आप हमेशा obj.ReferenceEquals(x, null) का उपयोग कर सकते हैं।

+0

अच्छा बिंदु - यह पता लगाना चाहिए कि खुद को बाहर :) –

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

  • कोई संबंधित समस्या नहीं^_^