रूप में ही है दो वास्तव में एक दूसरे के साथ कोई लेना देना नहीं है। विशेष रूप से, #==
समानता ऑपरेटर है और #===
समानता के साथ बिल्कुल कुछ भी नहीं है। व्यक्तिगत रूप से, मैं यह नहीं बल्कि दुर्भाग्यपूर्ण है कि #===
तो #==
के समान दिखता है मिल जाए, का उपयोग करता है बराबर चिह्न और अक्सर मामला समानता ऑपरेटर, ट्रिपल बराबर ऑपरेटर कहा जाता है या threequals ऑपरेटर जब यह वास्तव में समानता के साथ कोई संबंध नहीं है।
मैं केस सबसमशन ऑपरेटर (यह सबसे अच्छा है जिसके साथ मैं आ सकता हूं, मैं सुझावों के लिए खुला हूं, खासकर मूल अंग्रेजी बोलने वालों से)।
a === b
का वर्णन करने का सबसे अच्छा तरीका है "अगर मेरे पास a
लेबल वाला एक दराज है, तो क्या इसमें b
डालने का अर्थ है?"
तो, उदाहरण के लिए, Module#===
परीक्षण है कि क्या b.is_a?(a)
। आप Integer === 2
है, तो यह समझ में एक लेबल किए गए बॉक्स Integer
में 2
डाल करने के लिए है? हाँ यह करता है। Integer === 'hello'
के बारे में क्या? बेशक नहीं।
एक और उदाहरण Regexp#===
है। यह एक मैच के लिए परीक्षण करता है। क्या /el+/
लेबल वाले बॉक्स में 'hello'
डालने का अर्थ है? हाँ यह करता है।
श्रेणियों, Range#===
जैसे संग्रहों के लिए सदस्यता परीक्षण के रूप में परिभाषित किया गया है: यदि संग्रह तत्व में है तो संग्रह के साथ लेबल किए गए बॉक्स में एक तत्व डालना समझ में आता है।
तो, #===
ऐसा करता है: यह परीक्षण करता है कि रिसीवर के तहत तर्क को कम किया जा सकता है या नहीं।
case
अभिव्यक्तियों के साथ क्या करना है? सरल:
case foo
when bar
baz
end
if bar === foo
baz
end
स्रोत
2010-08-06 09:04:49
मुझे लगता है कि यहां सबसे अच्छा जवाब है http://stackoverflow.com/a/4467823/5048945 –