
Hi Bernhard, yes, it is very handy for csv tables. I deal a lot with them lately (budgets, CoViD19). I read a line, separate the fields and use that list for #destructDo: . Now I can just pick the first n columns I am interested in. (Mostly, identifying information is in the first columns.) Real world example: ^stringsOfLine destructDo: [:ignore :string2 :string3 :string4 | self produktbereich: string2 profitcenter: string3 bezeichnung: string4] I think that the code becomes much more readable. Except the name ... :-) Stay healthy, Christian -----Ursprüngliche Nachricht----- Von: Bernhard Pieber <bernhard@pieber.com> Gesendet: Samstag, 28. März 2020 18:53 An: Martin McClure <martin.mcclure@gemtalksystems.com> Cc: Christian Haider <christian.haider@smalltalked-visuals.com>; Christophe Dony <dony@lirmm.fr>; esug-list@lists.esug.org Betreff: Re: [Esug-list] destructDo: Hi everyone, I find Martin's arguments regarding "destruct" and "do" rather convincing. Which brings me to: #(1 2 3) destructured: [:a :b :c | a + b + c] Christian, have you ever used this method in a case in which the number of block arguments was smaller than the receiver collection's size? Bernhard
Am 28.03.2020 um 16:13 schrieb Martin McClure <martin.mcclure@gemtalksystems.com>:
Hi Christian and all,
#destructDo: is probably not the best name. "Destruct" can be interpreted as either short for "destructured" (which is what you want) or more like "destroy" as in "self-destruct." I initially took "destruct" in the "destroy" sense and guessed that #destructDo: might remove each element from the collection as it iterated. You could lengthen it to #destructured: or #destructuredDo:, but if there's a good short name that would be better.
#tupleDo: feels better.
But both #tupleDo: and #destructDo: contain "do" which implies iteration. Unless I'm missing something, your #destructDo: does not iterate. I'd really expect a #tupleDo: to iterate -- I'd expect with
#(1 2 3 4) tupleDo: [:a :b: | a + b]
that the block would be evaluated twice, once with 1 and 2 and once with 3 and 4. This would be a nice pattern; you could also have a tupleCollect: a tupleDetect: and so on.
#mapTo: is quite similar to #map: in PetitParser, except IIRC PetitParser's #map: expects an exact match in argument count. But maybe #map: is a good name for consistency.
Hope this helps.
Regards, -Martin
On 3/28/20 7:24 AM, Christian Haider wrote:
Yes, that would be nice. Unfortunately a bit more involved than this 1-liner…
Von: Esug-list <esug-list-bounces@lists.esug.org> Im Auftrag von Christophe Dony Gesendet: Samstag, 28. März 2020 15:17 An: esug-list@lists.esug.org Betreff: Re: [Esug-list] destructDo:
Hi. I like tupleDo:
or matchDo:
and what about installing a full pattern matching, as in many languages e.g. Scheme : https://docs.racket-lang.org/reference/match.html
#(1 #(2 3 6 7) 4) matchDo: [:a (:b :@c) :d] | …] here c would be #(3 6 7)
may be it already exist? if not, would really be a +
Christophe
Le 28/03/2020 à 14:15, Mark Plas a écrit : Hello Christian,
" I don’t really like the name,"
Maybe you could call it #tupleDo:?
#(1 2 3) tupleDo: [:a :b :c | …]
Mark
Mark Plas
Software Engineer T +32 2 467 34 30 mark.plas@mediagenix.tv
<image001.png>
Nieuwe Gentsesteenweg 21/1
1702 Groot-Bijgaarden - Belgium
<image002.png> <image003.png><image004.png>www.mediagenix.tv
Directions to MEDIAGENIX
This e-mail and any files attached to it are confidential and intended only for the use of the individuals or entity to whom they are addressed. If you have received this e-mail in error, please notify the sender immediately.
From: Esug-list <esug-list-bounces@lists.esug.org> On Behalf Of Christian Haider Sent: zaterdag 28 maart 2020 13:43 To: vwnc@cs.uiuc.edu; esug-list@lists.esug.org; amber-lang@googlegroups.com Subject: [Esug-list] destructDo:
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 don’t 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 don’t really like the name, but haven’t found anything better yet. Maybe #destructedDo: or just #destructed: or: #withPartsDo:… maybe something shorter? Ideas? • What are you thinking about this?
Happy hacking, Christian
_______________________________________________ Esug-list mailing list Esug-list@lists.esug.org http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
_______________________________________________ Esug-list mailing list
Esug-list@lists.esug.org http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org