相关疑难解决方法(0)

如何通过反射获取Ruby的Module类定义的常量?

我试图让Matz和Flanagan的"Ruby Programming Language"元编程章节进入我的脑海,但是我无法理解我梦想的以下代码片段的输出:

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"]
Run Code Online (Sandbox Code Playgroud)

本书指出class方法constants返回类的常量列表(正如您在输出中看到的那样A.constants).当我遇到上述奇怪的行为时,我试图获取为Module类定义的常量列表.

A的常量出现在Module.constants中.如何获取Module类定义的常量列表?

文档的状态

Module.constants返回系统中定义的所有常量.包括所有类和方法的名称

由于A继承了它的实现Module.constants,它在基类和派生类型中的表现如何?

p A.class               # => Class
p A.class.ancestors       # => [Class, Module, Object, Kernel]
Run Code Online (Sandbox Code Playgroud)

注意:如果您使用的是Ruby 1.9, …

ruby reflection metaprogramming

42
推荐指数
1
解决办法
3万
查看次数

标签 统计

metaprogramming ×1

reflection ×1

ruby ×1