2010-07-06 6 views

Antwort

9

Wenn Sie genaue Klassen (und nicht Nachkommen) entsprechen möchten, können Sie verwenden:

[Hash, Array].member? a.class 

Ich denke, Sie sollten erklären, was genau müssen Sie erreichen. Vielleicht ist das einzige, was Sie überprüfen müssen, ob Ihr Objekt ein Enumerable oder nicht ist, oder auch wenn es eine bestimmte Methode respond_to? ist.

+0

+1 Ich würde +2 wenn ich könnte für die zusätzliche Duckentyp Beratung. – rampion

+0

Dies überprüft, dass "a.class == Hash" oder "Array", aber für Unterklassen von ihnen fehlschlägt ... +1 für 'is_a? (Enumerable)' stattdessen ... –

5

Sie suchen Array#any?

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

#each in der Regel gibt nur die zählbare. #any? oder zusammen das Ergebnis der Blöcke.