我如何让Object#instance_of?接受多个参数,才能让下面的例子起作用?
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发布于 2010-05-06 11:56:06
[Foo,Bar].any? {|klass| my_foo.instance_of? klass}发布于 2010-05-06 14:30:06
如果你需要这样做一次,Ken的回答是可行的。
[Foo,Bar].any? {|klass| my_foo.instance_of? klass}但是,如果你这样做了几次,可能会发生一些其他的事情,例如,Foo和Bar之间的共同点可以更明确地表达出来:
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发布于 2010-05-07 03:56:09
您还可以对现有instance_of?实现执行alias_method_chain操作,以使用所需的功能对其进行扩展:
>> 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
>> endhttps://stackoverflow.com/questions/2778342
复制相似问题