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.

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

Reply via email to