首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个instance_of?

多个instance_of?
EN

Stack Overflow用户
提问于 2010-05-06 11:54:19
回答 3查看 590关注 0票数 3

我如何让Object#instance_of?接受多个参数,才能让下面的例子起作用?

代码语言:javascript
复制
class Foo; end
class Bar; end
class Baz; end

my_foo = Foo.new
my_bar = Bar.new
my_baz = Baz.new

my_foo.instance_of?(Foo, Bar) # => true
my_bar.instance_of?(Foo, Bar) # => true
my_baz.instance_of?(Foo, Bar) # => false
EN

回答 3

Stack Overflow用户

发布于 2010-05-06 11:56:06

代码语言:javascript
复制
[Foo,Bar].any? {|klass| my_foo.instance_of? klass}
票数 8
EN

Stack Overflow用户

发布于 2010-05-06 14:30:06

如果你需要这样做一次,Ken的回答是可行的。

代码语言:javascript
复制
[Foo,Bar].any? {|klass| my_foo.instance_of? klass}

但是,如果你这样做了几次,可能会发生一些其他的事情,例如,FooBar之间的共同点可以更明确地表达出来:

代码语言:javascript
复制
module Foobarish; end
class Foo
  include Foobarish
end
class Bar
  include Foobarish
end
class Baz; end

Foo.new.kind_of? Foobarish # => true
Bar.new.kind_of? Foobarish # => true
Baz.new.kind_of? Foobarish # => false
票数 2
EN

Stack Overflow用户

发布于 2010-05-07 03:56:09

您还可以对现有instance_of?实现执行alias_method_chain操作,以使用所需的功能对其进行扩展:

代码语言:javascript
复制
>> Object.class_eval do
>?   def instance_of_with_multiple_arguments(*arguments)
>>     arguments.any? { |klass| instance_of_without_multiple_arguments(klass) }
>>   end
>>
>>   alias_method :instance_of_without_multiple_arguments, :instance_of?
>>   alias_method :instance_of?, :instance_of_with_multiple_arguments
>> end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2778342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档