[squeak-dev] Re: [BUG] [ :a | ] value: 1
Lukas Renggli
renggli at gmail.com
Wed Dec 16 17:44:31 UTC 2009
> :) :) This is funny. VisualWorks has exactly the same bug^H^H^Hfeature.
> And if you look at the ANSI standard (ok, this is from the draft, but it is
> essentially the actual document) there is an exception for precisely this
> case, See the last sentence in section 3.4.4 Blocks:
>
> If a block has no <block body> or no <statements> in its <block body> then
> the value of the block is undefined.
Ok, I did not check that document. I somehow expected that all empty
blocks would return nil.
> Which allows [] to be implemented as e.g. [Random new next]. In fact both
> VisualWorks and Squeak answer the last argument:
> [:a ] value: 1 1
> [:a :b|] value: 1 value: 2 2
> [:a :b :c :d :e :f :g :h| ] valueWithArguments: (1 to: 8) 8
> [:a | nil] value: 1 nil
> [:a :b| nil] value: 1 value: 2 nil
> At least it is consistent whether the block is inlined or not ;)
> 1+2 ifNotNil: [:arg|] 3
> It as ever been so.
Thank you for the additional insight. I learned something new on the
Smalltalk semantics today :-)
I will fix my code then.
> P.S. I'm caught between wanting to fix it and wanting to let sleeping dogs
> lie. I'd like to know what all the other dialects do. If a substantial
> majority have the same curio I think we have to live with this, uh,
> ornament. Just to be clear, making it a preference is a sick joke on my
> part.
I think we'd better let it sleep. In my image I have 61 empty blocks
with one or more argument. Some of them might depend on that hidden
behavior.
Lukas
--
Lukas Renggli
http://www.lukas-renggli.ch
More information about the Squeak-dev
mailing list
|