Can somebody please tell me the semantic difference between #cull: and #value: ?
'Cull' is not a word I ever used in any english based conversation :)

Regards,

--
Esteban.

ps: I'm a big fan of having a "valuable" protocol, implemented by both
Symbol and BlockClosure (and MessageSend), and I miss this behavior in
Pharo.



Esteban A. Maringolo


2014-06-19 11:14 GMT-03:00 Yuriy Tymchuk <[email protected]>:
>
> On 19 Jun 2014, at 15:47, Tudor Girba <[email protected]> wrote:
>
> In other engines where we want scripting to be used, we use a cull: or
> value: with a prefix. In the case of Spec, this could be specCull:cull:.
> This could be used as an extension of Symbol without spawning religious wars
> :).
>
>
> Yes, also I can use a block with 1 param. The thing is that as far as I
> understand cull:cull: means:
>
> if possible: “value:value:”
> else if possible: “value:”
> else “value”
>
> So this can work for block. But maybe cull: has different philosophy
>
> Uko
>
>
> The funny thing is that in all these engines that do define special value:
> like methods, the implementation looks exactly the same. Perhaps this should
> tell us that it would be worth having it by default.
>
> Doru
>
>
> On Thu, Jun 19, 2014 at 2:16 PM, Yuriy Tymchuk <[email protected]> wrote:
>>
>> The thing is that cull:cull: can be used on block with 1 parameter. If you
>> consider symbol as a block with one parameter then it will work in the same
>> style.
>>
>> In other words: methods that use value:value: want to ensure that they are
>> working with 2 param block. Methods that use cull:cull: don’t care what is
>> there, but allow you to customise the result with up to 2 parameters. With
>> symbol you can customise it with 1 parameter.
>>
>> Uko
>>
>> On 19 Jun 2014, at 14:08, Henrik Johansen <[email protected]>
>> wrote:
>>
>> >
>> > On 19 Jun 2014, at 1:42 , Yuriy Tymchuk <[email protected]> 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
>> >
>> > 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
>>
>>
>
>
>
> --
> www.tudorgirba.com
>
> "Every thing has its own flow"
>
>

Reply via email to