简化多个is_a?调用对象

13 ruby

如何使用迭代器重写此行?

actor.inspect if actor.is_a? Array || actor.is_a? Hash
Run Code Online (Sandbox Code Playgroud)

我的尝试不起作用:

actor.inspect if [Array, Hash].each { |c| actor.is_a? c }
Run Code Online (Sandbox Code Playgroud)

Mla*_*vić 15

如果要匹配确切的类(而不是后代),可以使用:

[Hash, Array].member? a.class
Run Code Online (Sandbox Code Playgroud)

我想你应该解释一下你需要达到的目的.也许您需要检查的唯一事情是您的对象是否是一个Enumerable,或者即使它是respond_to?某种特定的方法.

  • 这会检查 `a.class == Hash` 或 `Array`,但对于它们的子类将失败... +1 表示 `is_a?(Enumerable)` ...... (2认同)

ram*_*ion 11

您正在寻找 Array#any?

actor.inspect if [Array, Hash].any? { |c| actor.is_a? c }
Run Code Online (Sandbox Code Playgroud)

#each通常只返回可枚举的. #any? 或者块的结果.