Упростить несколько is_a?вызовы на объекте - PullRequest
11 голосов
/ 06 июля 2010

Как переписать эту строку с помощью итератора?

actor.inspect if actor.is_a? Array || actor.is_a? Hash

Моя попытка не сработала:

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

Ответы [ 2 ]

12 голосов
/ 06 июля 2010

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

[Hash, Array].member? a.class

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

9 голосов
/ 06 июля 2010

Вы ищете Array#any?

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...