logo       

dependency mechanism: msg#00283

lang.smalltalk.squeak.beginners

Subject: dependency mechanism

Greetings,

The basic dependency example from "Smalltalk By Example" uses
Visualworks changed:with and update:with:from: methods like this:

price: aPrice
| oldPrice |
oldPrice := self price.
price := aPrice.
self changed: #price with: oldPrice

update: aSymbol with: oldPrice from: aStock
(aSymbol == #price) ifTrue:
[Transcript
cr; show: thisContext; tab; show: aSymbol; tab;
nextPutAll: 'Price changed from: '; show: oldPrice; tab;
nextPutAll: 'To: '; show: aStock price; flush]

The problem is that Squeak only implements update:with: so the
aStock price messaging doesn't work. My solution was to follow
VW's implementation by making the following changes:

Modified the changed:with: method to include from:.

changed: anAspect with: anObject
self dependents do: [:aDependent | aDependent update: anAspect with:
anObject from: self]

Added an update:with:from: method.

update: anAspect with: anObject from: aSender
^ self update: anAspect with: anObject

It took a while to see the problem and without looking at VW,
I never would have been able to figure a way. Is my fix
reasonable?

VW also implements expressInterestIn:for:sendBack: and
onChangeSend:to: methods. Anyone familiar with them and care to
provide pointers on the possibility of implementing something
similar in Squeak?

Thanks,
Chris


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise