我现在有一个奇怪的可能与rails ...一个类正在某处定义,我找不到它。对“class ClassName”的Grepping还没有设法找到它,但是当我加载rails控制台时它肯定存在。它只是一个继承自Object的vanilla类,没有其他任何定义......非常无聊。所以,我想要的是找出这个类常量最初从rails控制台定义的方法。换句话说,当声明这个类时,要打印出'__ FILE __'的值。我觉得某些类型的元编程应该可以实现这一点。
我想到了
ClassName.class_exec { __FILE__ }
但这总是给我当前的文件。
答案 0 :(得分: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