A stretch for rational behind cull: We are 'culling' the excess variables passed to the block (roughly equivalent to killing animals when there are too many of them).
On Thu, Jun 19, 2014 at 7:31 AM, Esteban Lorenzano <esteba...@gmail.com> wrote: > http://www.wordreference.com/es/translation.asp?tranword=cull > > yet, it does not looks like having anything to do with executing a block > with optional parameters :) > > > On 19 Jun 2014, at 11:24, Esteban A. Maringolo <emaring...@gmail.com> > wrote: > > > 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 <yuriy.tymc...@me.com>: > >> > >> On 19 Jun 2014, at 15:47, Tudor Girba <tu...@tudorgirba.com> 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 <yuriy.tymc...@me.com> > 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 < > henrik.s.johan...@veloxit.no> > >>> wrote: > >>> > >>>> > >>>> On 19 Jun 2014, at 1:42 , Yuriy Tymchuk <yuriy.tymc...@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 > >>>> > >>>> 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" > >> > >> > > > > >