Ruby样式访问模块和类的元素

时间:2010-07-14 15:36:35

标签: ruby

module Hints
    module Designer
        def self.message
            "Hello, World!"
        end
    end
end

有没有办法使用以下代码来访问消息方法?

p Hints.Designer.message

而不是

p Hints::Designer.message

2 个答案:

答案 0 :(得分:5)

句号.仅用于访问方法。

双冒号::用于表示名称空间。

模块和类可以互相嵌套。这将为嵌套类创建名称空间。 (从技术上讲,Module是Class的一个实例。)因此,无论Hints或Designer是类还是模块,以下内容都是正确的。

Hints::Designer.message

您可以在命令行上打开irb来尝试自己。 Hints.Designer.messageNoMethodError: undefined method 'Designer' for Hints:Module

更新 (因为我无权发表评论......)

虽然Ruby中的许多东西都可以被覆盖(“猴子修补”),但基本的操作员却不能。 ::是一种基本语言功能,它不应该是可自定义的(为了防止大混乱;))

答案 1 :(得分:1)

您可以使用点来访问message方法,但不能使用它来访问Designer模块,因为Designer它不是方法(而是常量)。 Dot仅用于调用方法。