怎么遍历一个module(模块)中定义的类

怎么遍历一个module(模块)中定义的类

比如:
[code="ruby"]module AMod;(class AClass;end;);end[/code]

AClass定义在AMod中,
当我只知道AMod而不知道有AClass存在的时候,我如何得到定义在其中的AClass以及其它定义在其内部的类?

1个回答

不介意monkey patch的话可以写这么个方法:
[code="ruby"]class Module
def classes
self.constants.map {|n| self.const_get n }.select {|e| e.is_a? Class }
end
end[/code]

用的时候就:
[code="irb"]D:\experiment>irb
irb(main):001:0> class Module
irb(main):002:1> def classes
irb(main):003:2> self.constants.map {|n| self.const_get n }.select {|e| e.is_a? Class }
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> module AMod
irb(main):007:1> class A; end
irb(main):008:1> B = Class.new
irb(main):009:1> C = 1
irb(main):010:1> end
=> 1
irb(main):011:0> AMod.classes
=> [AMod::B, AMod::A][/code]

不喜欢monkey patch的话把module当参数传到这样的方法里也行:
[code="ruby"]def classes(mod)
mod.constants.map {|n| mod.const_get n }.select {|e| e.is_a? Class }
end[/code]
一回事

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐