2011-08-10 44 views
1

我有一個緩存對象屬性,我想設置爲上下文名稱中的當前類和方法,以便跟蹤哪些方法/類正在生成這些對象的最大頻率。如何在代碼中引用本地方法的名稱屬性?

我可以使用下面的代碼輕鬆獲取當前類的名稱,但我正在努力尋找類似的方法來從文檔中收集當前方法的名稱。

set obj.ClassName = ..%ClassName(1) //Grab class name 
set obj.MethodName =     //Need to grab the method's name here 

我知道這當有問題的方法是設置爲一個對象生成很容易實現,但我寧願不沿着這條路走下去..必須有引用方法的名稱的簡單方法, 對?

///I'd rather not do this to my methods if I don't have to. 
Method MyMethod() [ CodeMode = objectgenerator ] 
+0

請在您的問題中添加標籤,指出您正在使用的編程語言。 –

+0

羅伯特 - 編程語言是緩存對象腳本,系統中沒有標籤代表這個。我不幸的是沒有足夠的代表來創建一個。 – mccrackend

+0

沒有支持的方式來執行此操作。我對此的反應是......如果你不是一個生成器方法,爲什麼你需要它?也許我可以告訴你另一種技術來實現你想要的。 – mcbainpc

回答

2

有一個宏可以做到這一點:$$$ CurrentMethod,在%occIO.inc中定義,你可以在%SYS中找到它,所以你不需要include來使用它。 $$$ CurrentClass也在那裏定義。

+0

$$$ CurrentMethod完美工作 - 非常感謝! – mccrackend

1

在方法中沒有「官方」的方法來做到這一點。

您可以使用$stack($stack,"PLACE")表達式來確定當前執行的代碼位置。調試目的應該足夠了。如果您真的需要,您可以從中提取方法名稱。我不會建議在生產代碼中使用它,儘管=)

+0

我擔心有沒有一種簡單的方法..接受的解決方案與$堆棧作爲一種可能性的答案。方法生成器可能是這樣做的最好方法。 – mccrackend

1

對於這樣的事情,我喜歡使用%Projection類。你可以查閱文檔,瞭解如何去做,但基本的想法是,當你編譯一個類時,它可以被設置爲生成另一個類。

如果您想要擴展Intersystem爲您提供的知識,例如知道您在使用什麼方法(Intersystem本身只是欺騙並更改類編譯器,而不創建大家可以使用的通用方法),您可以進行某種類似黑客攻擊擁有#CurrentMethod類參數並設置投影類,以便在保存時用實際方法名替換該類。

這是一個痛苦的設置,但一旦你做了它,你可以根據需要添加任何額外的元類功能。我這樣做的目的與你提到的類似,並用一些便捷方法生成強類型結果集對象。

您還可以在從Cache Studio加載項調用的代碼中執行相同的操作。例如,根據您編寫加載項的方式,您可以從菜單項運行代碼。

相關問題