2012-05-22 14 views
5

मैं एक रूबी वर्ग के लिए == लागू करना चाहता हूं। मैंरूबी में एक "==" कार्यान्वयन प्रकार की जांच करनी चाहिए?

def ==(o) 
    o.respond_to?(:id) && self.id == o.id 
end 

या

def ==(o) 
    o.is_a?(Foo) && self.id == o.id 
end 

this लेख के अनुसार, ऐसा लगता है कि पूर्व और अधिक समझ बनाने हैं कर सकते हैं। अगर मैं eql? लागू कर रहा था तो मैं बाद वाला करूँगा। क्या ये सही है?

+0

'==' मतलब * नहीं है कि इसे 'eql?' की एक और विशिष्ट आवश्यकता होने पर भी प्रकारों को पार करना होगा। हालांकि, यह उपयोगी हो सकता है कि यह दिखाया गया है कि यह अधिक संरचनात्मक रूप से आधारित है। –

+0

@pst क्या आप 'respond_to?' का उपयोग कर कह रहे हैं ठीक है? –

+0

इस परिदृश्य में 'आईडी' क्या है? क्या यह ऑब्जेक्ट # object_id जैसा ही है या क्या यह एक सक्रिय रिकॉर्ड आईडी या एक आवृत्ति चर के लिए एक एक्सेसर है? –

उत्तर

1

यह निर्भर करता है कि आप किसी मनमानी वस्तु या किसी विशिष्ट प्रकार की तुलना में हैं। दूसरा फॉर्म विशिष्ट है, पहला जेनेरिक।

आपके मामले में आप शायद विशिष्ट फॉर्म के साथ ठीक हैं। जेनेरिक तुलना केवल तभी प्रासंगिक होती है जब आप जिस ऑब्जेक्ट की तुलना कर रहे हैं उसे परिवर्तित किया जा सकता है या मिलान किया जा सकता है। id का उपयोग करना बहुत ही खुला समाप्त होता है। यह इंगित करेगा कि फू 10 और बार 10 बराबर हैं जब उन्हें पूरी तरह से अलग स्रोतों से खींचा जा सकता है।

+1

दाएं। मुझे लगता है कि 'id' एक बुरा उदाहरण था। मेरी कक्षा वास्तव में'job_id' के लिए जांचती है –

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