加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 21:22:14 所属栏目:百科 来源:网络整理
导读:编辑:我使用的是 Ruby 2.0.0版 我在文件example.rb中有以下代码 def say_hello puts 'hi'endputs respond_to?(:say_hello)say_hello 运行此代码时,输??出为: falsehi 我很困惑为什么为“respond_to”返回false?当我可以使用那种方法. “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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读