对"respond_to?"感到困惑 方法

Mic*_*dah 8 ruby

编辑:我使用的是Ruby 2.0.0版

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

def say_hello
  puts 'hi'
end

puts respond_to?(:say_hello)
say_hello
Run Code Online (Sandbox Code Playgroud)

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

false
hi
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么为"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
Run Code Online (Sandbox Code Playgroud)

输出是:

true
bye
Run Code Online (Sandbox Code Playgroud)

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

Vic*_*gin 15

顶级方法被定义为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
Run Code Online (Sandbox Code Playgroud)