Могу ли я заставить Ruby распечатать исходный код для динамического метода?

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

Вставьте это куда-нибудь, и вы можете получить довольно хорошее начало при получении исходного кода из класса, определенного во время выполнения.

6
задан Community 23 May 2017 в 12:16
поделиться