メソッドのフック
Posted feedbacks - Smalltalk
Squeak Smalltak で。AOP 拡張を施す AspectS というパッケージを用います(Squeak3.7 用)。
AsAspect を継承した AsFoo に次のメソッドを定義します。この例では、クラス Foo のインスタンスに #bar というメソッドを起動させたとき、トランスクリプトに時刻を出力します。
使用例:
| aspect |
aspect := AsFoo new.
aspect install
Foo new bar. "=> 時刻出力"
aspect uninstall
AsAspect を継承した AsFoo に次のメソッドを定義します。この例では、クラス Foo のインスタンスに #bar というメソッドを起動させたとき、トランスクリプトに時刻を出力します。
使用例:
| aspect |
aspect := AsFoo new.
aspect install
Foo new bar. "=> 時刻出力"
aspect uninstall
1 2 3 4 5 | AsFoo >> adviceBefore
^ AsBeforeAfterAdvice
qualifier: (AsAdviceQualifier attributes: #(receiverClassSpecific))
pointcut: [{AsJoinPointDescriptor targetClass: Foo targetSelector: #bar}]
beforeBlock: [:rcvr :args :aspect :client | Transcript cr; show: Time now]
|


todogzm
#6017()
Rating0/8=0.00
例えば、あるクラスのあるメソッドを実行する前に他の処理を呼びたい(例えばログやトランザクション開始など)。 また、そのメソッドの終了後にも何らかの後処理を呼びたい(トランザクション終了など)。
そのような、メソッドに対するフック処理を書いてください。 ライブラリを使用してメソッドのフックを実現した場合は ライブラリの名前を紹介してくれると助かります。
[ reply ]