2010-07-06 2 views

ответ

9

Если вы хотите, чтобы соответствовать точным классам (а не потомки), вы можете использовать:

[Hash, Array].member? a.class 

Я думаю, вы должны объяснить, что именно вам нужно достичь. Возможно, единственное, что вам нужно проверить, это то, что ваш объект является Enumerable или нет, или даже если он respond_to? какой-либо конкретный метод.

+0

+1 Я бы +2, если мог, для дополнительного совета по уткам. – rampion

+0

Это проверяет, что 'a.class == Hash' или' Array', но не будет выполняться для подклассов из них ... +1 для 'is_a? (Enumerable)' вместо ... –

5

Вы ищете Array#any?

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

#each обычно просто возвращает перечислим. #any? ors вместе результат блоков.

Смежные вопросы