2013-09-20 15 views
5

私は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?私は真実を得る。私は何が起こっているのか分かりません。誰かが私が行方不明だと言うことができますか?Integer.respond_to?(:even?)がfalseを返すのはなぜですか?

答えて

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 
+1

あなたは私を打つので、良い答えに、私はボンネットの下で起こっていることのために持っていたものを加えました。 –

関連する問題