2011-06-10 55 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 
相關問題