Я исследовал получение исходного кода метода , если он существует в виде файла, но без этой ссылки на файл, можно ли динамически распечатать исходный код метода код? Кажется, я могу получить доступ к сигнатурам методов в классе с помощью 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
Вставьте это куда-нибудь, и вы можете получить довольно хорошее начало при получении исходного кода из класса, определенного во время выполнения.