I use a Set because I want to ensure there will not be duplicates. And because I doesn't make sense to me to have the same student twice, hehe :D So, if nobody uses sets nowadays, why have them? I guess this example is not a cool one, but maybe I really have a good reason to use aSet, and if then I want to use collect I have to be careful on what I expect it to return, and what it *actually* returns... I don't like it very much. But perhaps it's just me :)
On 27 October 2011 16:54, Nicolas Cellier < [email protected]> wrote: > 2011/10/27 Clara Allende <[email protected]>: > > Ok, but this means I have to worry of the receiver's class before I send > > collect:, so as I don't fuck it all up.... and I don't want to think > about > > that!!! See, if I want the collection of grades of the students, I would > > like to do this: > > grades > > ^self students collect: [.aStudent | aStudent grades] > > regardless of whatever is the class of students... This does the trick > for > > all the collections, except for Set. And I don´t know if students is an > > instance of Set, and I really don't want to think if it is or not. If I > > don't want repeated students and I create my collection as an instance of > > Set, an i.e.; I want to calculate the average, then I'm screwed because > the > > collection I get from the collect: wasn't the want that I wanted. > > So, I have to know previously that my collection is an instance of Set, > or > > if it isn't, so as to know if I have to convert it first.... > > And if I use collect: as:, as you suggest, this means the collections are > no > > longer polymorphic for me :( > > Sorry, maybe I'm really stupid, but I don't know how that message solves > > best the problem than redefining collect: for Set. For the particular > case I > > don't want the repeated objects (which AFAIK is not so common) I could > send > > asSet. > > > > > Hi Clara. > IMHO, collect: [:e | e even] snippet makes not much sense, because Set > are Unordered. > Thus you won't be able to map the order of original Set with produced > collection... > So what will you do of this collection of true and false ? > > If you want to count the elements matching your predicate, just tell > your intentions so > (Set with: 1 with: 2 with:3 with:4 with:5) count:[:e | e even] > > Collecting grade is more interesting, but we can also answer to you by > another question: > Why the hell are your students stored in a Set? > Do you fear duplicates? or do you want to filter homozygotes out? > Why should the choice of collection class be neutral? > They all behave differently w.r.t. a message or another... > And to me, #collect: is polymorphically suspect, did you try > > 'bogito ergo sum' collect: [:e | e isVowel]. > #[ 0 1 2] collect: [:e | 1 - e ]. > > Nicolas > > > On 27 October 2011 11:05, Henrik Sperre Johansen > > <[email protected]> wrote: > >> > >> On 27.10.2011 15:40, Clara Allende wrote: > >>> > >>> I know, but our students don't :) So they ran into problems because the > >>> message send didn't answer what they were specting.... because it > makes > >>> sense that if I want to transform the objects in my collection, I might > get > >>> repeated objects... Maybe I'm not thinking in terms of consistency, I'm > just > >>> putting myself on student's shoes :P > >> > >> The consistency rule to remember for #collect:/#select:/#reject: is that > >> they will return a collection of the receiver's species. > >> #collect:as: was added as a general answer to the situation your > students > >> ran into :) > >> > >> set := Set withAll: #(1 2 3 4 5 6 7 8). > >> result := set collect: #even as: Bag. > >> > >> Cheers, > >> Henry > >> > >> > >> > > > > > > > > -- > > > > "Most good programmers do programming not because they expect to get paid > or > > get adulation by the public, but because it is fun to program." > > > > Linus Torvalds > > > > -- "*Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.*" Linus Torvalds
