Próbuję zrozumieć lepsze odbicie w Smalltalk. Używam najnowszej wersji Squeak (v4.3). Chcę przechwycić każdą wiadomość wysłaną do instancji jednej z moich klas. Sądziłem, że mogę zastąpić metodę, ale Stéphane Ducasse wyjaśnił mi, że ze względu na wydajność ta metoda nie jest używana (to jest moje podsumowanie odpowiedzi). Którą metodę należy przesłonić/jak mogę przechwycić wysłane wiadomości?Przechwytywanie wiadomości w pisku
Oto kod mojego próba:
Object subclass: #C
instanceVariableNames: 'i'
classVariableNames: ''
poolDictionaries: ''
category: 'CSE3009'.
C class compile: 'newWithi: anInt
^(self new) i: anInt ; yourself.'.
C compile: 'withArgs: someArgs executeMethod: aMethod
Transcript show: ''Caught: ''.
^super withArgs: someArgs executeMethod aMethod.'.
C compile: 'foo: aText
Transcript show: aText.
Transcript show: i.
Transcript cr.'.
C compile: 'i: anInt
i := anInt.'.
o := C newWithi: 42.
o foo: 'This is foo: '.
Wykonywanie cały ten kawałek rentowności kod:
This is foo: 42
Kiedy chciałbym posiadać:
Caught: This is foo: 42
Najnowsza wersja Squeaka to 4.4. –