2011-08-10 14 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

Robert - プログラミング言語はCache Object Scriptです。これを表すシステム内にタグはありません。私は残念ながら、まだどちらかを作成するのに十分な担当者がいません。 – mccrackend

+0

これを行うには、サポートされている方法はありません。これに対する私の反応は...あなたが発電機の方法でないなら、それはなぜ必要なのでしょうか?たぶん私はあなたが望むものを達成するための別のテクニックを教えてくれるかもしれません。 – mcbainpc

答えて

2

これを行うマクロがあります:%occ0.inc内に定義されている$$$ CurrentMethodは、%SYSにありますので、それを使用するためにインクルードする必要はありません。 $$$ CurrentClassもそこに定義されています。

+0

$$$ CurrentMethodは完全に機能しました - 多くの感謝! – mccrackend

1

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

$stack($stack,"PLACE")式を使用して、現在実行されているコード位置を判断できます。デバッグの目的には十分なはずです。本当に必要な場合は、メソッド名を抽出することができます。しかし、これをプロダクションコードで使用することはお勧めしません。=)

+0

私は単純な方法がないのではないかと恐れていました。おそらくメソッドジェネレータがこれを行うための最良の方法です。 – mccrackend

1

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

Intersystemがどんな方法を使っているかを知っているようなもの(Intersystem自体はただのチートで、誰でも使用できる一般的な方法を使わずにクラスコンパイラを変更する)を拡張したい場合、 #CurrentMethodクラスパラメータを持ち、保存時に実際のメソッド名と置き換えるためにプロジェクションクラスを設定します。

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

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

関連する問題