Ruby 对象和模块

标签 ruby object module

当我阅读模块文档时,我对这两个类感到困惑。 首先,我看到有一种方法可以将命名常量设置为给定对象。

Object.const_set("FOO", 40)

但是我检查了 ruby​​ 文档,Object 中没有 const_set方法,然后我发现它是在 Module 中定义的.

我认为 Object 是所有 Ruby 对象的默认根。为什么可以使用模块方法呢?我对它们之间的关系感到困惑。

最佳答案

如下所示:const_set是存储在Module中的实例方法:

Module.instance_methods(false).include? :const_set #=> true

另请注意,ObjectClass 的实例:

Object.instance_of? Class #=> true

并且ClassModule的子类:

Class.superclass #=> Module

所有这些意味着 Module 中定义的实例方法可通过继承供 Class 对象使用。因此,Class 的任何实例(例如 Object)都可以使用存储在 Module 中的所有实例方法(包括 :const_set) .

关于Ruby 对象和模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38448477/

相关文章:

html - 无法提取 html 表格行

javascript - 使用 jQuery (JavaScript) 合并对象数组中多个相同键的值

c# - 如何使用 C# 编写 LINQ 查询以从另一个对象获取对象?

javascript - 在javascript中查找具有最高值的对象属性

python - imp.load_source : 'module' has no attribute 'foo' 出现问题

ruby - 如何使用 watir-webdriver 按类和文本查找元素

ruby - 如何在每次保存时使用 Rubocop 使 RubyMine 自动更正

Ruby FFI gem 无法打开库文件

typescript - 为什么tslint是:recommended not allowing modules?

c# - 如何将 ASP.NET 项目拆分为具有不同模块的不同版本