我试图找到Command在Ruby中调用的某种类型的所有子类,并且我遇到了以下代码,它完美地完成了这个技巧,但是我并不真正理解它是如何工作的,主要是class << [Subtype]部分.我已经尝试过阅读,但我觉得还有一些我不知道的Ruby魔法.有人可以向我解释一下:-)
ObjectSpace.enum_for(:each_object, class << Command; self; end).to_a()
Run Code Online (Sandbox Code Playgroud)
class << Command; self; end返回单例类Command.这是Command是唯一(直接)实例的类.
在ruby中,C的子类的singleton类是C的singleton类的子类.因此,Command的所有子类都具有从Command的单例类继承的单例类.
ObjectSpace.each_object(C)迭代作为类实例C或其子类之一的所有对象.所以通过ObjectSpace.each_object(singleton_class_of_command)迭代命令及其所有子类.
该enum_for位返回一个Enumerable,它枚举each_object迭代的所有元素,因此您可以将其转换为数组to_a.
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |