On 20 Jun 2014, at 22:59, stepharo <stepharo@free.fr> wrote:


On 19/6/14 14:08, Henrik Johansen wrote:
On 19 Jun 2014, at 1:42 , Yuriy Tymchuk <yuriy.tymchuk@me.com> wrote:

Hi,

maybe we should implement #cull:cull: in symbol so that it will call #cull:? Because this looks correct, if block has 1 parameter, then #cull:cull: boils down to #value:, but when we have a symbol instead, we have an exception.

I can open an issue and implement that stuff, but I want a feedback from the conceptual point of view.

Uko

#cull: is supposed to be the equivalent to the #value: protocol, where the parameter is optional.

Symbol has no #value:value: message, hence it should have no #cull:cull: either.

You could argue it should implement both, with value:value: polymorphic to the block
[:a :b | a perform: theSymbol with: b ].

but cull:cull: would then mean equivalence to:
for #+  [:a :b | a + b]
for #squared [:a | a self]

And I don�t see how that�d be intuitive/useful enough to warrant inclusion

+1

I�m not telling to implement #value:value: but #cull:cull: which is equivalent to #value:

so instead of [ :var | var name ] I can use just #name




Considering the sole reason cull: on Symbol exists, is to allow select:  etc. to be written using cull so the block arg is optional, but still do aCollection collect: #mySymbol, the closest equivalent would be .
aCollection sort: #> / aCollection inject: 0 into: #+
which, while might be nice, both have no use for cull:cull: in the same manner:
aCollection inject: 0 into: #squared -> [:sub :next | sub squared] ???
 The whole "who is the receiver, what�s going on�-factor of cull:cull: on symbol is non-intuitive enough that at least I feel it�s better to write out the block explicitly.

Cheers,
Henry