有沒有一種方法可以知道方法定義的最後一行的位置,而無需使用解析器(除了在Ruby實現本身下運行的解析器)或正則表達式解析源代碼或任何外部庫,這樣做?獲取方法定義的最後一行
這是很容易通過使用set_trace_func
或method_added
提供的信息,因爲它們是在一個方法定義的時刻觸發獲得方法定義的第一行,我可以直接從set_trace_func
或解析分析提供(信息來自method_added
的信息caller
)。
但是對於方法定義的最後一行,我能做的最好的是查找下一個方法定義的第一行或由set_trace_func
檢測到的其他call
。我可以告訴原來的方法定義已經以這一行結束,但不能分辨它是否早於此結束。例如,假設我試圖獲取方法foo
定義的最後一行。在的情況下的源代碼是象下面這樣:
| def foo
| ...
n | end; def bar
| ...
鑑於bar
定義的第一行是n
,我可以(巧合)告訴foo
定義的最後一行是n
。但是,如果源代碼正好是象下面這樣:
| def foo
| ...
n-1 | end
n | def bar
那麼我想n-1
爲foo
最後一行,我不能想出一個辦法來告訴它是在這種情況下n-1
而不是n
。源代碼還可以具有空/註釋行是這樣的:
| def foo
| ...
n-9 | end
|
| # comment
|
| =begin
| ...
| =end
|
n-1 |
n | def bar
,這是不是一個大問題,我仍然得到n-1
而不是正確的n-9
,但越來越n
反而是一個大問題。
你想達到什麼目的? Ruby的解釋器中可能存在更深入的魔法,你可以利用它來獲取這些信息。 –
@theTinMan我在Ruby中編寫了一個軟件,它讀取一個Ruby文件並生成一個html文件,該文件可以更輕鬆地瀏覽代碼。對於每個方法定義和常量賦值,它顯示從源提取的信息,例如參數列表(對於方法)或值(對於常量)以及對應的源代碼部分。我正在尋找一個強大的和非冗餘的方式。如果你能顯示任何方向,這將會有所幫助。 – sawa