ruby - 为什么 Integer.respond_to?( :even? ) 返回 false?

标签 ruby

我一直在研究 Ruby Koans,我发现 about_open_classes.rb koan 很有趣。特别是他们修改 Integer#even? 方法的最后一个测试。我想尝试一下这个概念,所以我打开了 Irb 并尝试运行 Integer.respond_to?(:even?),但令我惊讶的是我得到了错误。然后我尝试了 Fixnum.respond_to?(:even?) 并得到了错误。我还尝试了 Integer.respond_to?(:respond_to?) 并得到了 true,当我执行 2.even? 时,我也得到了 true。我不知道发生了什么。谁能告诉我缺少什么?

最佳答案

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

关于ruby - 为什么 Integer.respond_to?( :even? ) 返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18918288/

相关文章:

irb 中的 Ruby 字符串比较和字符编码

ruby - 如何在ruby中制作动态多维数组?

ruby-on-rails - Rails ActiveRecord 保存错误未定义方法 `[]' for nil :NilClass

ruby-on-rails - Rails 多态关系和 link_to

ruby - 语言和可伸缩性之间的关系

ruby-on-rails - Rails : Set config. time_zone 到服务器的时区?

css - 为什么 heroku 不使用我的 CSS 文件?

ruby-on-rails - 未定义的局部变量或方法 `searchkick'

ruby - 从另一个文件启动EventMachine

ruby-on-rails - ActionDispatch::Http::UploadedFile 到 Base64