2010-07-06 15 views

Odpowiedz

9

Jeśli chcesz dopasować dokładnie klasy (a nie potomkowie), można użyć:

[Hash, Array].member? a.class 

myślę, że należy wyjaśnić, co dokładnie chcesz osiągnąć. Być może jedyną rzeczą, którą musisz sprawdzić, to czy Twój obiekt jest Enumerable czy nie, lub nawet jeśli jest to pewna konkretna metoda.

+0

+1 Chciałbym +2, gdybym mógł za dodatkową poradę dla ducktyping. – rampion

+0

Sprawdza to, że 'a.class == Hash' lub' Array', ale nie powiedzie się dla ich podklas ... +1 dla 'is_a? (Enumerable)' zamiast ... –

5

Szukacie Array#any?

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

#each zwykle po prostu zwraca przeliczalny. #any? lub razem wynik bloków.

Powiązane problemy