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 ]
4

3 回答 3

2

有一个宏可以做到这一点: $$$CurrentMethod,在 %occIO.inc 中定义,您可以在 %SYS 中找到它,因此您不需要包含即可使用它。$$$CurrentClass 也在那里定义。

于 2012-02-17T15:13:25.727 回答
1

在方法中没有“官方”方法可以做到这一点。

您可以使用$stack($stack,"PLACE")表达式来确定当前执行的代码位置。它应该足以用于调试目的。如果你真的需要,你可以从中提取一个方法名。我不建议在生产代码中使用它=)

于 2011-08-11T03:21:52.547 回答
1

对于这样的事情,我喜欢使用 %Projection 类。您可以查看有关如何执行此操作的文档,但基本思想是,当您编译一个类时,可以将其设置为生成另一个类。

如果您想扩展 Intersystem 为您提供的功能,例如了解您使用的方法(Intersystem 本身只是欺骗和更改类编译器,而没有创建每个人都可以使用的通用方法),您可以做一些技巧,比如拥有 #CurrentMethod类参数并设置投影类以在保存时将其替换为实际的方法名称。

这是一个痛苦的设置,但是一旦你这样做了,你可以根据需要添加任何额外的元类特性。我这样做的目的与您提到的类似,并使用一些方便的方法生成强类型的结果集对象。

您也可以在从 Cache Studio 加载项调用的代码中执行相同的操作。例如,根据您编写加载项的方式,您可以从菜单项运行代码。

于 2011-08-12T20:39:07.167 回答