【发布时间】:2011-08-01 00:55:12
【问题描述】:
我调查了getting the source code of a method,如果它作为文件存在,但没有这个文件引用,是否可以动态打印方法的源代码?看来我可以使用 self.methods 和每个方法的.arity 访问类中的方法签名。我相信 ri_for gem 指的是原始源文件。
解决这个问题的更好方法:如果一个类在运行时被扩展,它的源代码是否可以安全地被调查?或者调查的能力是否仅限于方法签名和实例变量的名称,也许是类变量?
编辑:我使用的解决方案: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
将其粘贴到某处,您就可以很好地从运行时定义的类中获取源代码。
【问题讨论】: