Как переписать эту строку с помощью итератора?Упростить несколько is_a? вызывает объект
actor.inspect if actor.is_a? Array || actor.is_a? Hash
Моя попытка что работа dosen't:
actor.inspect if [Array, Hash].each { |c| actor.is_a? c }
Как переписать эту строку с помощью итератора?Упростить несколько is_a? вызывает объект
actor.inspect if actor.is_a? Array || actor.is_a? Hash
Моя попытка что работа dosen't:
actor.inspect if [Array, Hash].each { |c| actor.is_a? c }
Если вы хотите, чтобы соответствовать точным классам (а не потомки), вы можете использовать:
[Hash, Array].member? a.class
Я думаю, вы должны объяснить, что именно вам нужно достичь. Возможно, единственное, что вам нужно проверить, это то, что ваш объект является Enumerable
или нет, или даже если он respond_to?
какой-либо конкретный метод.
Вы ищете Array#any?
actor.inspect if [Array, Hash].any? { |c| actor.is_a? c }
#each
обычно просто возвращает перечислим. #any?
ors вместе результат блоков.
+1 Я бы +2, если мог, для дополнительного совета по уткам. – rampion
Это проверяет, что 'a.class == Hash' или' Array', но не будет выполняться для подклассов из них ... +1 для 'is_a? (Enumerable)' вместо ... –