2010-04-11 81 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