Sto cercando di capire meglio il riflesso in Smalltalk. Sto usando l'ultima versione di Squeak (v4.3). Voglio intercettare ogni messaggio inviato a istanze di una delle mie classi. Supponevo di poter ignorare il metodo ProtoObject>>withArgs:executeMethod
ma Stéphane Ducasse mi ha spiegato che per ragioni di prestazioni, questo metodo non è utilizzato (questo è il mio riassunto della sua risposta). Quale metodo devo sovrascrivere/come potrebbe intercettare i messaggi inviati?Messaggi di intercettazione in squittio
Ecco il codice del mio tentativo:
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: '.
L'esecuzione di questo intero pezzo di rendimenti codice:
This is foo: 42
Quando mi piacerebbe avere:
Caught: This is foo: 42
L'ultima versione rilasciata di Squeak è 4.4. –