Ruby:在运行时定位类定义?

时间:2010-04-11 18:30:27

标签: ruby-on-rails ruby

我现在有一个奇怪的可能与rails ...一个类正在某处定义,我找不到它。对“class ClassName”的Grepping还没有设法找到它,但是当我加载rails控制台时它肯定存在。它只是一个继承自Object的vanilla类,没有其他任何定义......非常无聊。所以,我想要的是找出这个类常量最初从rails控制台定义的方法。换句话说,当声明这个类时,要打印出'__ FILE __'的值。我觉得某些类型的元编程应该可以实现这一点。

我想到了

ClassName.class_exec { __FILE__ }

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

1 个答案:

答案 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