Ruby中的方法访问

9 ruby methods

Ruby如何隐式地允许类外部的类访问方法?

例:

class Candy
    def land
        homer
    end
end

def homer
    puts "Hello"
end

Candy.new.land #Outputs Hello
Run Code Online (Sandbox Code Playgroud)

jan*_*anm 24

"本垒打"方法的定义是将方法添加到Object类.它没有定义自由函数.

Candy类隐式继承自Object,因此可以访问Object中的方法.当您在"land"方法中调用"homer"时,方法解析无法在当前类中找到定义,转到超类,找到已添加到Object的方法,并调用它.


use*_*631 5

找出发生的事情的简单方法

  1. 搜索哪些类/模块来解析Candy对象中使用的方法?

    p Candy.ancestors#=> [糖果,对象,内核]

  2. Candy有没有叫做本垒打的方法?

    p Candy.instance_methods(false).grep("homer")#=> []

    p Candy.private_instance_methods(false).grep("homer")#=> []

  3. OK Candy没有任何称为'homer'的方法.

  4. 查找链中的下一步(参见1)=>"对象"

  5. Object有一个名为"homer"的方法吗?p Object.instance_methods(false).grep("homer")#=> []

    p Object.private_instance_methods(false).grep("homer")#=> ["homer"]

Candy在其查找链中有Object,而后者又有一个私有实例方法"homer",因此方法解析成功

DEF语句,总是定义在类的任何方法自我是在定义点

  1. 什么是定义本垒打之前?

    p self#=> main def homer将"Hello"结束

  2. 那它的类型是什么?

    p self.class#=> Object

这就是为什么本垒打最终会成为对象的原因