hello again all--
i asked about this last week and only heard from one person (thanks Torsten). however, i would like to hear from some others on this on if this is a bug or not.
from what i understand of the #perform: selector orSendTo: otherTarget method in both Object and Model, the receiever is supposed to be asked first if it can handle the selector; if not, then the selector is passed off to otherTarget. the comments in both classes says this is supposed to happen, but the implementation in both classes seems not to ask the receiever anything; instead, it just sends the selector onto otherTarget.
other classes such as PluggableText, StringHolder, and TranscriptStream override this method to what looks to be the proper implementation.
why is the message implemented like this in Object and Model? what am i missing?
thanks for your consideration and replies, jason
On Sat, 30 Oct 1999, Jason McVay wrote:
hello again all--
i asked about this last week and only heard from one person (thanks Torsten). however, i would like to hear from some others on this on if this is a bug or not.
from what i understand of the #perform: selector orSendTo: otherTarget method in both Object and Model, the receiever is supposed to be asked first if it can handle the selector; if not, then the selector is passed off to otherTarget. the comments in both classes says this is supposed to happen, but the implementation in both classes seems not to ask the receiever anything; instead, it just sends the selector onto otherTarget.
other classes such as PluggableText, StringHolder, and TranscriptStream override this method to what looks to be the proper implementation.
why is the message implemented like this in Object and Model? what am i missing?
AFAIK, #perform:orSendTo: is only used in menu dispatching code - it's not an extended general #perform: (otherwise it should be disallowed to be overidden in subclasses). So if by default the otherTarget should handle everything, it is implemented correctly. However, this behaviour is highly counter-intuitive.
So my proposal is: 1. rename all current references and implementations from perform:orSendTo: to #handle:orSendTo: which makes the intent clear. (maybe #intercept:defaultHandler: is even better). 2. implement Object>>#perform:orSendTo: as you suggested (if needed at all - this could silently break some code. Maybe another selector would be better, like #perform:ifNotUnderstood:).
/bert
squeak-dev@lists.squeakfoundation.org