Ruby: найти определение класса во время выполнения? - PullRequest
3 голосов
/ 11 апреля 2010

У меня странный, вероятно, с рельсами прямо сейчас ... где-то определяется класс, и я не могу его найти. Грэп для «class ClassName» не смог найти его, но он определенно есть, когда я загружаю консоль rails. Это просто ванильный класс, унаследованный от Object, и больше ничего не определено ... довольно скучно. Итак, я хотел бы узнать, где эта константа класса была первоначально определена с консоли rails. Другими словами, для вывода значения '__ FILE __', когда этот класс был объявлен. Я чувствую, что какой-то тип метапрограммирования должен сделать это возможным.

Я думал просто сделать

ClassName.class_exec { __FILE__ }

Но это всегда дает мне текущий файл.

1 Ответ

5 голосов
/ 12 апреля 2010

Метод ловушки 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...