मेरे पास तीन वस्तुएं हैं जो सभी एक ही कक्षा हैं। एक को Item.new
के माध्यम से बनाया गया था और अन्य दो डेटाबेस (Mongoid) से खींचे गए थे। मैं एक/एक और तरीका करने के लिए इन वस्तुओं में से किसी भी गुजर रहा हूँ और उस विधि में टाइप जाँच is_a?
के माध्यम से:क्यों .is_a? और .class विवादित परिणाम देते हैं?
def initialize (item, attrs = nil, options = nil)
super(attrs, options)
raise 'invalid item object' unless item.is_a?(Item)
खैर, यह बढ़ाने हिट हो रही है। तो मैं रेल कंसोल में कक्षा, is_a और instance_of की जांच करता हूं। मुझे विवादित परिणाम मिल रहे हैं। उनके पास class
क्यों होगा लेकिन उनमें से केवल एक instance_of
है जो class
है?
>> i0.is_a? Item
=> false
>> i1.is_a? Item
=> false
>> i2.is_a? Item
=> true
>> i0.class
=> Item
>> i1.class
=> Item
>> i2.class
=> Item
>> i0.instance_of?(Item)
=> false
>> i1.instance_of?(Item)
=> false
>> i2.instance_of?(Item)
=> true
क्या मेरे इनपुट की इस प्रकार की जांच करने का कोई बेहतर तरीका है? एक ही कक्षा में तीन चीजें क्यों नहीं होंगी, वे सभी उस वर्ग के उदाहरण होंगे?
* क्या वे एक ही कक्षा हैं? उदाहरण के लिए, एआर संघों ने ऐरे होने का दावा किया है, लेकिन वे नहीं हैं। –
क्या आप अन्य वस्तुओं के लिए 'i0.class.object_id' के आउटपुट जोड़ सकते हैं? हो सकता है कि कक्षाओं के पुनः लोडिंग के साथ कुछ करना हो और आपको उसी वर्ग के दो अलग-अलग उदाहरण मिलें। –
@ डेव न्यूटन ठीक है, क्या कक्षा और is_a प्रकार की सामग्री की जांच करने का एक बेहतर तरीका है? – jcollum