2010-07-06 11 views

उत्तर

9

आप सटीक वर्गों (और नहीं वंश) से मिलान करना चाहते हैं, तो आप उपयोग कर सकते हैं:

[Hash, Array].member? a.class 

मुझे लगता है कि आप की व्याख्या करनी चाहिए कि वास्तव में आप क्या हासिल करने की जरूरत है। शायद आपको केवल एक चीज की जांच करने की आवश्यकता है यदि आपकी ऑब्जेक्ट Enumerable है या नहीं, या यहां तक ​​कि यदि यह respond_to? कुछ विशेष विधि है।

+0

+1 यदि मैं अतिरिक्त डकटाइपिंग सलाह के लिए कर सकता हूं तो मैं +2 चाहता हूं। – rampion

+0

यह जांचता है कि 'a.class == हैश' या' ऐरे 'है, लेकिन उनमें से subclasses के लिए असफल हो जाएगा ... ' is_a? (संख्यात्मक) 'के लिए +1 ... –

5

आप के लिए Array#any?

actor.inspect if [Array, Hash].any? { |c| actor.is_a? c } 

#each देख रहे हैं आम तौर पर सिर्फ गणनीय देता है। #any? या तो ब्लॉक के परिणाम एक साथ।

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