Hi Michael, It's a trick. It only works because #value: is implemented on symbol as:
Symbol>>value: anObject ^anObject perform: self. So the following works too. #asUppercase value: 'I am a trick' My suggestion is that you shouldn't follow such tricks. Although I do it too sometimes with things like. aDictionary at: #foo ifAbsent: nil. Since nil responds self to #value it seems redundant to me to put the nil in a block so that it can return nil when the block is evaluated with #value. Even though in this case the execution is faster but in the case of sending a symbol to select it is slower. In both cases it is harder to read so in my opinion it is best to stick with arguments that are expected. Ron Teitelbaum > From: Michael Davies > Sent: Wednesday, February 07, 2007 1:07 PM > > I was browsing some of the Magritte source code, when I saw a message > that confused me: > selectors := anObject class allSelectors > select: #isDescriptionSelector. > > I couldn't understand how you could pass a Symbol to #select: instead > of a block -- certainly the definition of Collection>>select: implies > it should only take a block. But trying it for myself, I see it works > -- eg > { 1. 2. 3. 4. } select: #even. > > can be used in place of: > > { 1. 2. 3. 4. } select: [ :each | each even ] > > Given how much simpler this looks, I was surprised I'd not seen this > usage before, and searching for senders of #select: shows that the > wordier version seems to be generally preferred. > > So my question is: is this a usage I should adopt or avoid? > > Cheers, > Michael > _______________________________________________ > Beginners mailing list > Beginners@lists.squeakfoundation.org > http://lists.squeakfoundation.org/mailman/listinfo/beginners _______________________________________________ Beginners mailing list Beginners@lists.squeakfoundation.org http://lists.squeakfoundation.org/mailman/listinfo/beginners