怎么遍历一个module(模块)中定义的类
比如:
[code="ruby"]module AMod;(class AClass;end;);end[/code]
AClass定义在AMod中,
当我只知道AMod而不知道有AClass存在的时候,我如何得到定义在其中的AClass以及其它定义在其内部的类?
怎么遍历一个module(模块)中定义的类
比如:
[code="ruby"]module AMod;(class AClass;end;);end[/code]
AClass定义在AMod中,
当我只知道AMod而不知道有AClass存在的时候,我如何得到定义在其中的AClass以及其它定义在其内部的类?
不介意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]
一回事