2013-11-24 39 views
3

我試圖去通過所有方法是使用順序塊在String變量x ='X'上調用sourceCodeAt。如何將其更改爲X?

an_object class methods do: [:n | ....] 

自動獲取其參數特定類。 我需要撥打sourceCodeAt的方法。但我有這個方法在一個變量作爲字符串。 'X'代替X.我如何將它作爲方法實例更改爲X,以便能夠對其調用sourceCodeAt?

+0

老實說,我不明白X是怎麼回事。也許你可以證明一些例子? – Uko

+0

我使用以下方法:an_object類的方法做到:[:n | 當我打印n我得到:LinkedList2 >>#RemoveAnElement :.雖然,我只需要獲取方法名稱#RemoveAnElement。我將方法名稱傳遞給方法:sourceCodeAt以獲取參數。但我沒有成功! – Asan

+0

我使用了這個obj:= x asSymbol其中x是方法名稱作爲一個字符串,它的工作原理!我現在試圖自動提取方法的標題。通過閱讀該方法的第一行,從源代碼中獲取它們會更好嗎? – Asan

回答

2

好的,看看:#methods發送給類對象(Behavior子類)的消息將返回一個CompiledMetod實例的集合。我不知道得到的參數是什麼意思,但(至少在Pharo3中),您可以發送#argumentNamesCompiledMetod以獲取參數的名稱。否則,您可以發送#selector以獲取表示方法的選擇器(名稱)的符號。當然,當你打印它時,你會得到類>>方法,因爲它的定義類似#printOn:方法CompiledMetod類。

如果你想獲得一個方法的源代碼,只需要問一個方法。 E.i:

an_object class methods do: [ :method | method sourceCode ....] 
+0

我使用下面的方法:an_object類的方法是:[:n |當我打印n我得到:LinkedList2 >>#RemoveAnElement :.雖然,我只需要獲取方法名稱#RemoveAnElement。我將方法名稱傳遞給方法:sourceCodeAt以獲取參數。但是我沒有成功,因爲我可以發送'#RemoveAnElement'而不是#RemoveAnElement。 – Asan

+0

@Asan我已經擴大了答案 – Uko

+0

我用這個obj:= x asSymbol其中x是作爲一個字符串的方法名稱,它的工作原理。我現在試圖自動提取方法的標題。通過閱讀該方法的第一行,從源代碼中獲取它們會更好嗎? – Asan

1

如果您已經有一個字符串中的源代碼,則不需要「sourceCodeAt:」。只要使用你有的字符串。 sourceCodeAt:方法獲取現有方法的源代碼並返回一個字符串。如果你已經有了包含源代碼的字符串,就使用它。

+0

謝謝..真的爲什麼不:)。 – Asan