
Yes, exactly the same idea. Cool! -----Ursprüngliche Nachricht----- Von: Esug-list <esug-list-bounces@lists.esug.org> Im Auftrag von Cyril Ferlicot D. Gesendet: Samstag, 28. März 2020 17:02 An: esug-list@lists.esug.org Betreff: Re: [Esug-list] destructDo: Le 28/03/2020 à 13:42, Christian Haider a écrit :
Hi,
I am using a nice little method #destructDo: for a while now and it feels good.
In VisualWorks:
SequenceableCollection>>destructDo: aBlock
"Evaluate aBlock with the receiver's elements as parameters.
aBlock takes its arguments from the receiver.
'ok'
#(1 2 3) destructDo: [:a :b :c | a + b + c]
#(1 2 3) destructDo: [:a :b | a + b]
#(1 2 3) destructDo: [:a | a]
#(1 2 3) destructDo: [42]
'not ok'
#(1 2 3) destructDo: [:a :b :c :d | a + b + c + d]
"
^aBlock cullWithArguments: self asArray
In Amber:
SequenceableCollection>>destructDo: aBlock
^aBlock valueWithPossibleArguments: self
In Pharo and other dialects, I dont know, but should be as easy.
For example you can do
(('2020-03-28' tokensBasedOn: $-) collect: #asNumber) destructDo: [:year :month :day |
Date newDay: day monthNumber: month year: year]
I like that the block is not the receiver (like with #valueWithArguments or #cullWithArguments), but the last argument.
Now the questions:
* I am sure that others came up with this. Anybody knows? * What are you using for this pattern? * I dont really like the name, but havent found anything better yet. Maybe #destructedDo: or just #destructed: or: #withPartsDo: maybe something shorter? Ideas? * What are you thinking about this?
Happy hacking,
Christian
Hi Christian, In Pharo 8 was introduced a #bind method that seems similar to what you do: SequenceableCollection>>bind: aBlock "Extract items from the receiver and use them as argumeents of aBlock. Signal an error (ArgumentsCountMismatch) when the arguments count of aBlock does not match the receiver size." "(#(1 2 3) bind: [ :first :second :third | first + second + third ])
6"
^ aBlock valueWithArguments: self The difference is that arguments are not optionals but I think it would be cool to make them optional in this #bind: method.
_______________________________________________ Esug-list mailing list Esug-list@lists.esug.org http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
-- Cyril Ferlicot https://ferlicot.fr