2011-06-10 52 views
1

我正在将遗留代码转换为新项目中的新代码。 有超过100个类似的代码,我必须将它们转换为稍有不同的新格式。 基本上,从遗留应用程序获取特定方法,重命名它,修改方法的内容以适应新格式,并将该方法放入新项目的类中。 由于它们有超过100个,我想以编程方式进行,而不是手动复制和粘贴和修改。Ruby:如何动态获取方法内容并将其写入文件?

有没有办法将方法的源代码动态地作为字符串获取? 它只能用于特定的方法,而不能用于整个类或文件的内容。

之后,我想我可以做gsub,或者可以使用AST(抽象语法树)传递给Ruby2Ruby。

所以我需要更多的问题的答案How can I get source code of a methods dynamically and also which file is this method locate in?

任何帮助将不胜感激。

回答

0

您可以使用source_location来查找您正在查找的方法的开头,然后从该点解析文件直到该方法结束。您可以从该方法的开始处开始检查文件的每一行,当您找到块的开始时递增计数器,并在到达块末尾时递减计数,直到计数器达到0.

+0

谢谢埃文。 – tadatoshi 2011-06-11 01:08:41

+0

欢迎来到Stack Overflow!如果我的答案解决了您的问题,请点击答案旁边的复选标记以接受答案。这将奖励我的声望点。 – 2011-06-12 01:46:09

1

After进一步调查,我使用了live_ast gem将方法对象转换为抽象语法树,并从该抽象语法树(它使用下面的Ruby2Ruby)为该方法生成代码。 其实,live_ast提供了一个方便的方法to_ruby来完成这两个步骤。

它工作得很好。

例如

require 'live_ast' 
require 'live_ast/to_ruby' 

SomeClassWithMethod.instance_method(:method_name).to_ruby 
相关问题