2015-01-02 82 views

回答

3

你可以得到所有Module小號目前在對象存儲(但是請注意,這可能包括Module s表示不再可達但尚未收集垃圾還)有ObjectSpace.each_object(Module)既然each_object像所有其他迭代方法返回一個Enumerator(其本身在Enumerable混合),我們可以簡單select那些Module S的include?Enumerable模塊在其ancestors列表:

ObjectSpace.each_object(Module).select {|m| m.include?(Enumerable) } 
# => [Process::Tms, Enumerator::Generator, Enumerator::Lazy, Enumerator, 
#  ObjectSpace::WeakMap, Dir, File, ARGF.class, IO, Range, Struct, Hash, 
#  Array] 
5

您也可以使用ObjectSpace模塊來獲取所有類和模塊的列表。把額外的檢查Enumerable

require 'set' 
enumed = Set.new 

ObjectSpace.each_object { |o| enumed.add(o) if [Class, Module].include?(o.class) && o.include?(Enumerable) } 
puts enumed.to_a 
+0

謝謝。不知道ObjectSpace。 :) – juanitofatas

相關問題