Я исследовал получение исходного кода метода , если он существует в виде файла, но без этой ссылки на файл, возможно ли динамически печатать исходный код метода? Кажется, я могу получить доступ к сигнатурам метода в классе с помощью self.methods и каждого метода .arity
. Я считаю, что драгоценный камень ri_for относится к исходному файлу.
Лучший способ сформулировать этот вопрос: если класс расширяется во время выполнения, безопасен ли его источник для исследования? Или возможность исследования ограничена сигнатурой метода и именами переменных экземпляра, может быть, переменными класса?
Редактировать: Решение, которое я использовал: http://seattlerb.rubyforge.org/svn/ruby2ruby/1.2.1/lib/ruby2ruby.rb
class Ruby2Ruby < SexpProcessor
def self.translate(klass_or_str, method = nil)
sexp = ParseTree.translate(klass_or_str, method)
unifier = Unifier.new
unifier.processors.each do |p|
p.unsupported.delete :cfunc
end
sexp = unifier.process(sexp)
self.new.process(sexp)
end
end
class Module
def to_ruby
Ruby2Ruby.translate(self)
end
end
Вставьте это куда-нибудь, и вы сможете неплохо начать получать исходный код из класса, определенного во время выполнения.