我一直在浏览 Ruby Koans,发现 about_open_classes.rb koan 很有趣。特别是他们修改Integer#even?
方法的最后一个测试。我想玩弄这个概念,所以我打开 Irb 并尝试运行Integer.respond_to?(:even?)
,但令我惊讶的是,我弄错了。然后我试了一下Fixnum.respond_to?(:even?)
,结果是假的。我也尝试Integer.respond_to?(:respond_to?)
并得到了真实,当我这样做时,我也2.even?
得到了真实。我不知道发生了什么。谁能告诉我我错过了什么?
问问题
237 次
1 回答
9
Fixnum 的实例会respond_to? :even?
,但 Fixnum类本身不会
>> 3.respond_to? :even?
=> true
>> 3.class
=> Fixnum
>> Fixnum.respond_to? :even?
=> false
>> Fixnum.class
=> Class
您可以通过定义自己的测试类来了解其工作原理:
class Test
def self.a
"a"
end
def b
"b"
end
end
>> Test.respond_to? :a
>> true
>> Test.respond_to? :b
>> false
>> t = Test.new
>> t.respond_to? :a
>> false
>> t.respond_to? :b
>> true
于 2013-09-20T13:43:59.287 回答