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

了解Ruby模块的行为

发布时间:2020-12-17 01:26:05 所属栏目:百科 来源:网络整理
导读:所以我刚刚开始编写一些 Ruby,虽然我理解模块是如何工作的,但以下行为仍然让我失望. module ModuleA def a_greet 'Hello from module A' endendmodule ModuleB def b_greet 'Hello from module B' endendinclude ModuleAinclude ModuleB# WHY DOES THIS WORK
所以我刚刚开始编写一些 Ruby,虽然我理解模块是如何工作的,但以下行为仍然让我失望.

module ModuleA
    def a_greet
        'Hello from module A'
    end
end


module ModuleB
    def b_greet
        'Hello from module B'
    end
end


include ModuleA
include ModuleB

# WHY DOES THIS WORK !!!!!
p ModuleA.b_greet

我知道可以在不指定Module的情况下调用模块中的函数.并且我永远不会以这种方式编写代码,但我无法理解为什么在明确说明ModuleA时可以调用ModuleB中包含的方法?

解决方法

等等,还有更多:

"Why does this work?".b_greet # => "Hello from module B"

您将这些模块包含在顶级对象main中.它是一个特殊的对象:它上面定义的所有方法都可用于所有对象(参见上面的行,现在在String上有b_greet方法). ModuleA也是一个对象,因此,当您包含ModuleB时,ModuleA会获取其方法.如果将这些模块包含在常规类/对象中,则不会获得此“共享”行为.

(编辑:李大同)

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

    推荐文章
      热点阅读