Ruby:如何动态获取方法内容并将其写入文件



我正在一个新项目中将遗留代码转换为新代码。有100多个类似的代码,我必须将它们转换成一种稍微不同的新格式。基本上,从遗留应用程序中获取一个特定的方法,对其进行重命名,修改方法的内容以适应新的格式,并将该方法放入新项目的类中。由于它们有100多个,我想以编程的方式完成,而不是手动复制、粘贴和修改。

有没有一种方法可以动态地将方法的源代码作为字符串?它必须仅用于特定方法,而不是类或文件的整个内容。

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

因此,我需要的不仅仅是这个问题的答案。我如何动态地获取方法的源代码,以及这个方法位于哪个文件中?。

任何帮助都将不胜感激。

经过进一步的研究,我使用live_astgem将方法对象转换为抽象语法树,并从该抽象语法树生成方法的代码(下面使用Ruby2Ruby)。实际上,live_ast提供了一种方便的方法来实现这两个步骤。

它运行得很好。

例如

require 'live_ast'
require 'live_ast/to_ruby'
SomeClassWithMethod.instance_method(:method_name).to_ruby

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

相关内容

  • 没有找到相关文章

最新更新