challenge メソッドのフック

例えば、あるクラスのあるメソッドを実行する前に他の処理を呼びたい(例えばログやトランザクション開始など)。 また、そのメソッドの終了後にも何らかの後処理を呼びたい(トランザクション終了など)。

そのような、メソッドに対するフック処理を書いてください。 ライブラリを使用してメソッドのフックを実現した場合は ライブラリの名前を紹介してくれると助かります。

Posted feedbacks - Smalltalk

Squeak Smalltak で。AOP 拡張を施す AspectS というパッケージを用います(Squeak3.7 用)。

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]

Index

Feed

Other

Link

Pathtraq

loading...