我试图让Matz和Flanagan的"Ruby编程语言"元编程章节进入我的脑海,但我无法理解我想出的以下代码片段的输出:
p Module.constants.length # => 88
$snapshot1 = Module.constants
class A
NAME=:abc
$snapshot2 = Module.constants
p $snapshot2.length # => 90
p $snapshot2 - $snapshot1 # => ["A", "NAME"]
end
p Module.constants.length # => 89
p Module.constants - $snapshot1 # => ["A"]
p A.constants # => ["NAME"]
这本书指出,类方法constants
返回类的常量列表(如A.constants
的输出所示).
A
的常数显示在模块中.常数.如何获取模块类定义的常量列表?
百州
Module.constants
返回系统中定义的所有常量.包括所有类和方法的名称
既然A
继承了Module.constants
的实现,那么它在基类型和派生类型中的行为有什么不同?
p A.class # => Class
p A.class.ancestors # => [Class, Module, Object, Kernel]
Note: If you're using Ruby 1.9, 100 would return an array of symbols instead of strings.