2010-04-11 37 views
3

我现在有一个奇怪的可能与轨道...一个类正在定义的地方,我找不到它。对“class ClassName”进行缩放并没有设法找到它,但是当我加载rails控制台时,它确实存在。这只是一个从Object继承而来的香草类,没有其他定义......很无聊。所以,我想要的是一种方法来确定这个类常量最初是从rails控制台定义的。换句话说,当这个类被声明时,可以打印出'__ FILE __'的值。我觉得某种类型的元编程应该可以做到这一点。Ruby:在运行时定位类定义?

我想到的只是做

ClassName.class_exec { __FILE__ } 

但这只是总是给我当前文件。

+2

你为什么不只是给我们的类的名字,有人可能会发现它为您 – 2010-04-11 18:51:03

+0

滑稽故事...类被称为MatchData。它在核心ruby中定义,当然,正则表达式的结果。我当然感到很愚蠢!不过,这里的答案在一般情况下很有用。 – 2010-04-12 02:41:53

回答

5

钩方法inherited,如果定义的话,得到每当创建一个子类调用。因此:

#!/usr/bin/ruby1.8 

class Object 
    def self.inherited(child) 
    target_class = "Child" 
    raise "#{target_class} defined" if child.name == target_class 
    end 
end 

class Parent 
end 

class Child < Parent # => /tmp/foo.rb:6:in `inherited': Child defined (RuntimeError) 
         # =>   from /tmp/foo.rb:13 

end