当我阅读模块文档时,我对这两个类感到困惑。 首先,我看到有一种方法可以将命名常量设置为给定对象。
Object.const_set("FOO", 40)
但是我检查了 ruby 文档,Object 中没有 const_set
方法,然后我发现它是在 Module 中定义的.
我认为 Object
是所有 Ruby 对象的默认根。为什么可以使用模块方法呢?我对它们之间的关系感到困惑。
最佳答案
如下所示:const_set
是存储在Module
中的实例方法:
Module.instance_methods(false).include? :const_set #=> true
另请注意,Object
是 Class
的实例:
Object.instance_of? Class #=> true
并且Class
是Module
的子类:
Class.superclass #=> Module
所有这些意味着 Module
中定义的实例方法可通过继承供 Class
对象使用。因此,Class
的任何实例(例如 Object
)都可以使用存储在 Module 中的所有实例方法(包括
.:const_set
)
关于Ruby 对象和模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38448477/