0

无论如何以编程方式将ruby方法的内容作为字符串返回?例如像这样的东西?

class Foo
  def foo_method
    some_code = "goes here"
  end
end

puts Foo.method_body(:foo_method) # => "some_code = \"goes here\""
4

1 回答 1

1

是的,有点。:-)

作为Wrong的一部分,我必须实现一个类似的功能(获取块的源),您可以在chunk.rb(依赖于 Ryan Davis 的 RubyParser 以及一些非常有趣的)中看到如何(甚至可能重用代码)源文件glomming 代码)。您必须对其进行修改才能使用Method#source_location,并可能调整其他一些东西,使其包含或不包含def.

顺便说一句,我认为 Rubinius 内置了这个功能。由于某种原因,它被排除在 MRI(标准 Ruby 实现)之外,因此被破解了。

更新:这个答案将我们指向method_source gem,它似乎是一个(相对)干净的一次性解决方案,使用类似的算法(保持源文件中的行,直到您停止出现解析错误)。

于 2013-02-06T22:02:43.693 回答