(1 to: self) inject: 1 into: #*
Jarvis, Robert P. (Contingent)
Jarvisb at timken.com
Wed Jan 19 20:34:14 UTC 2000
There are a few issues here:
First, IMO this change just raises the obfuscation quotient. I think it
would make learning to use these messages harder for beginners as they'd
have to learn two forms of the message, one using a block as the second
argument and another using a symbol. Even experienced Smalltalker's might
have to stop and puzzle this out for a minute before they recognized what
was going on.
Second, IIRC we went through an exercise a while back to get rid of message
implementations in various classes which, while they were useful, served
mostly as crutches and/or bandages for problems elsewhere in the image.
(Someone else will have to chime in with specifics here, as I was only an
observer of this process). Slapping bits of Collection protocol
(specifically #value:value:) into Symbol seems to me to be a step backwards
in this regard.
Third, this can produce slow-running code. For example, if
Integer>>factorial was implemented as you suggest it would run roughly twice
as slowly as it does today. Using your implementation below
Time millisecondsToRun: [ 500 factorial ]
answers 5137. The standard #factorial method takes 2634 milliseconds to
evaluate "500 factorial".
To use the car salesman's adage, "Oh, sure, you can do that - but you
wouldn't be happy with it...". :-)
Bob Jarvis
Compuware @ Timken
> -----Original Message-----
> From: Mats Nygren [SMTP:nygren at sics.se]
> Sent: Wednesday, January 19, 2000 2:05 PM
> To: Squeak
> Subject: (1 to: self) inject: 1 into: #*
>
> Hello,
>
> I find the following elegant:
>
> aCollection inject: 1 into: #*
>
> (and similarly for all binary messages and single-keyword messages)
>
> more so than the normal:
>
> aCollection inject: 1 into: [ :a :b | a * b]
>
> For example like this:
>
> factorial
> (1 to: self) inject: 1 into: #*
>
> The price for this seems to be simply:
>
> !Symbol methodsFor: 'converting' stamp: 'mn 1/19/2000 19:38'!
> value: i value: ii
> ^i perform: self with: ii! !
>
> And similarly for unary messages
>
> aCollection collect: #negated
>
> What do you think?
>
> /Mats Nygren
More information about the Squeak-dev
mailing list
|