当前位置:  开发笔记 > 后端 > 正文

Ruby中的方法访问

如何解决《Ruby中的方法访问》经验,为你挑选了2个好方法。

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的方法,并调用它.



1> janm..:

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

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



2> user24631..:

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

    搜索哪些类/模块来解析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

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

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有