My second question is: Why not name the arguments in a block? Okay, might be a bit of overkill, but why not? It's much closer to the method syntax and there's one less rule to learn. E.g.
( 1 to: 10 ) inject: 0 into: [ previous: total current: each "named block arguments" total := total + each. ].
I'm not sure if it is really possible to reduce the number of rules here.
One of the strengths of the current standard >is that blocks with the same number of arguments are equivalent in a polymorphic sense. Thus to write
aCollection do: [ :person | person saySomething]
So, if names were required, we might find ourselves in an impossibly
complex web of dependencies
between the producers and consumers of blocks that might, ultimately, be
resolved only by adding another rule:
Well, I didn't want to require it. It was meant for documentation purposes only. And I would continue the value:value: messages. But in this way blocks can easily by converted to methods and vice versa.
Come to think of it: The value: and value:value: messages are probably the reason why only colons are permitted. Otherwise we had to code something like aCollection do: [ value: each | ... ].
No, I just want to extend the block parameter syntax for documentation purposes and drop the vertical bar, something like this :
aCollection [ <optional name>: arg1 <optional name>: arg2 <code> ].
Reinier.
squeak-dev@lists.squeakfoundation.org