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

このような場合、私は %Projection クラスを使用するのが好きです。その方法についてはドキュメントを参照できますが、基本的な考え方は、あるクラスをコンパイルすると、別のクラスを生成するように設定できるということです。

インターシステムズが提供するものを、現在のメソッドを知るなどの方法で拡張したい場合 (インターシステムズ自体は、誰もが使用できる一般的なメソッドを作成せずに、クラス コンパイラをチートして変更するだけです)、 #CurrentMethod を持つようなハックを行うことができます。 class パラメータを設定し、保存時にそれを実際のメソッド名に置き換えるように投影クラスを設定します。

これを設定するのは面倒ですが、一度設定を行ってしまえば、必要に応じてメタクラスの種類の機能を追加できます。私はあなたが言及したのと同様の目的で、そしていくつかの便利なメソッドで強く型付けされた結果セット オブジェクトを生成するためにこれを行います。

Cache Studio アドインから呼び出されるコードで同じことを行うこともできます。アドインの作成方法によっては、たとえば、メニュー項目からコードを実行できます。

于 2011-08-12T20:39:07.167 に答える
1

メソッドでそれを行う「公式の」方法はありません。

式を使用して、$stack($stack,"PLACE")現在実行されているコードの位置を特定できます。デバッグ目的には十分なはずです。本当に必要な場合は、そこからメソッド名を抽出できます。ただし、これを製品コードで使用することはお勧めしません =)

于 2011-08-11T03:21:52.547 に答える