Ruby如何隐式地允许类外部的类访问方法?
例:
class Candy def land homer end end def homer puts "Hello" end Candy.new.land #Outputs Hello
janm.. 24
"本垒打"方法的定义是将方法添加到Object类.它没有定义自由函数.
Candy类隐式继承自Object,因此可以访问Object中的方法.当您在"land"方法中调用"homer"时,方法解析无法在当前类中找到定义,转到超类,找到已添加到Object的方法,并调用它.
"本垒打"方法的定义是将方法添加到Object类.它没有定义自由函数.
Candy类隐式继承自Object,因此可以访问Object中的方法.当您在"land"方法中调用"homer"时,方法解析无法在当前类中找到定义,转到超类,找到已添加到Object的方法,并调用它.
找出发生的事情的简单方法
搜索哪些类/模块来解析Candy对象中使用的方法?
p Candy.ancestors#=> [糖果,对象,内核]
Candy有没有叫做本垒打的方法?
p Candy.instance_methods(false).grep("homer")#=> []
p Candy.private_instance_methods(false).grep("homer")#=> []
OK Candy没有任何称为'homer'的方法.
查找链中的下一步(参见1)=>"对象"
Object有一个名为"homer"的方法吗?p Object.instance_methods(false).grep("homer")#=> []
p Object.private_instance_methods(false).grep("homer")#=> ["homer"]
Candy在其查找链中有Object,而后者又有一个私有实例方法"homer",因此方法解析成功
该DEF语句,总是定义在类的任何方法自我是在定义点
什么是自定义本垒打之前?
p self#=> main def homer将"Hello"结束
那它的类型是什么?
p self.class#=> Object
这就是为什么本垒打最终会成为对象的原因