2012-03-02 20 views
12

मामले में किसी ऑब्जेक्ट का उपयोग करने के लिए क्लास ऑब्जेक्ट का उपयोग करने का सबसे अच्छा तरीका क्या है? मान लीजिए मेरे पास a है जो Class कक्षा का एक उदाहरण है। मैं इसे विभिन्न वर्गों के खिलाफ मिलना चाहता हूं। क्योंकि उदाहरण के लिए, भले ही a == String, a === String सच नहीं है अगर मैंकेस स्टेटमेंट

case a 
when String then ... 
when Fixnum then ... 
end 

ऐसा करते हैं इच्छित परिणाम नहीं देंगे। ऐसा करने का चालाक तरीका क्या है?

+1

एक ही विषय [यहां] (http://stackoverflow.com/questions/3908380/ruby-class-types-and-case-statements) –

+2

@selman आपके द्वारा लिंक किया गया प्रश्न अप्रासंगिक है। उस उदाहरण में 'item' कक्षा का उदाहरण नहीं है। – sawa

उत्तर

13

मैं to_s का उपयोग नहीं है, क्योंकि "String".to_s"String" होगा, इसलिए शायद मैं

case 
when a == String then ... 
when a == Fixnum then ... 
end 

या

a = String 

case [a] 
when [String] then puts "String" 
when [Array] then puts "Array" 
end 
+1

मुझे नहीं पता कि '[]' चाल क्यों काम करती है। यह वही करता है जो मैं चाहता हूं। क्या आप कोई संकेत दे सकते हैं? – wrtsprt

-1

मेरा अस्थायी उत्तर to_s का उपयोग करना है, लेकिन मुझे यकीन नहीं है कि यह सबसे अच्छा किया जा सकता है या नहीं। बेहतर उत्तरों की प्रतीक्षा कर रहा है।

case a.to_s 
when "String" then ... 
when "Fixnum" then ... 
end 
11

कुछ इस तरह का उपयोग कर के साथ समस्या:

case a.to_s 
when "String" then ... 
when "Fixnum" then ... 
end 

है कि यह पूरी तरह से उपवर्गों याद करते हैं तो आप कुछ एक स्ट्रिंग है, लेकिन अपनी पहली शाखा द्वारा याद किया जाता है कि मिल सकता है। इसके अलावा, name अर्थात् to_s से अधिक बेहतर विकल्प होगा, आप इसकी स्ट्रिंग प्रस्तुति के बजाय कक्षा के नाम का परीक्षण कर रहे हैं; नतीजा एक जैसा हो सकता है लेकिन case a.name स्पष्ट होगा।

आप एक case का उपयोग करें और उपवर्गीकरण से निपटने के लिए चाहते हैं तो आपको Module#<= इस तरह इस्तेमाल कर सकते हैं:

case 
when a <= String then ... 
when a <= Fixnum then ... 
end 

हां, आपको प्रत्येक when में a दोहराने के लिए है, लेकिन है कि बस कैसे case काम करता है।

-1

क्योंकि

Array === Array # return false 

और "मामला है जब ऐसा होता है "मतलब" === ", तो आप समस्या को पूरा करते हैं।

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