ruby – 对“respond_to?”方法感到困惑

前端之家收集整理的这篇文章主要介绍了ruby – 对“respond_to?”方法感到困惑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑:我使用的是 Ruby 2.0.0版

我在文件example.rb中有以下代码

def say_hello
  puts 'hi'
end

puts respond_to?(:say_hello)
say_hello

运行此代码时,输​​出为:

false
hi

我很困惑为什么为“respond_to”返回false?当我可以使用那种方法.

“respond_to?”方法似乎以这种方式工作:

class Person
  def say_bye
    puts 'bye'
  end
end

mike = Person.new
puts mike.respond_to?(:say_bye)
mike.say_bye

输出是:

true
bye

有没有人知道为什么“respond_to?”在第一种情况下返回false?

解决方法

顶级方法定义为private,Object#respond_to?默认情况下忽略私有方法(你需要传递第二个参数才能识别say_hello):
def say_hello
  puts 'hi'
end

puts respond_to?(:say_hello)                    #=> false
puts respond_to?(:say_hello,:include_private)  #=> true
say_hello

猜你在找的Ruby相关文章