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" > >
