5

私は Ruby Koans を検討してきましたが、about_open_classes.rb koan が興味深いものであることがわかりました。Integer#even?特にメソッドを変更する最後のテスト。この概念をいじってみたかったので、Irb を開いて実行してみInteger.respond_to?(:even?)ましたが、驚いたことに false になりました。それから私は試しFixnum.respond_to?(:even?)てみましたが、偽になりました。私も試しInteger.respond_to?(:respond_to?)てみて、真実になり2.even?ました。何が起こっているのかわかりません。誰が私が欠けているかを教えてもらえますか?

4

1 に答える 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 に答える