对“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 .respond_to? Ruby的检查方法,而不是具有respond_to的 Rails
如果对象可以接收该方法,则采用符号并返回true , 否则返回false
您的第一个代码在respond_to之前有一个缺失点( 。 )? …当我跑它打印喜,但没有确认真实情况。
语法:object.respond_to?(:method)
– > [1,2,3,5,8,13] .respond_to?(:push)
这个花了很多挖掘。
正如这里所解释的, http : //marakana.com/bookshelf/ruby_tutorial/scope.html靠近底部:“在任何类或模块之外定义的方法成为Object上的私有方法,并且随处可用。”
self,在文件的顶层,是一个叫做’main’的特殊东西。
现在这是有趣的部分。 对象否认他们响应私有方法。
…另一个答案有剩下的信息。