Bunun bir dosya olarak var, ancak bu dosya referans olmadan, dinamik bir yöntemin kaynak kodunu yazdırmak mümkün olup olmadığını getting the source code of a method araştırdık? Ben sınıftaki yöntem imzalarına self.methods ve her yöntemin .arity
ile erişebileceğim gibi görünüyor. Ben ri_for gem orijinal kaynak dosyaya atıfta inanıyorum.Ruby, dinamik bir yöntem için kaynak kodu yazdırabilir miyim?
bu soruyu çerçeveye daha iyi bir yolu: Bir sınıf çalışma zamanında uzatılırsa, kaynak araştırılmaktadır gelen güvenli? Veya yöntem imzasıyla sınırlı örnekleme ve örnek değişkenlerin isimleri, belki de sınıf değişkenleri?
Düzenleme: Çözüm kullandım: 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
yerde bu yapıştırın ve çalışma zamanında tanımlanmış bir sınıf dışına kaynak kodunu alma konusunda oldukça iyi bir başlangıç alabilirsiniz.
1, ama nedir? –
Teşekkürler, cevabınız SexpProcessor'u kontrol etmemi sağladı ve oradan Modül sınıfını tüm sınıf kaynak kodunun dışına taşan bir ro_ruby yöntemi ile genişletebildim. – mike