Collection withAllSubclasses collect: #numberOfLinesOfCode

is the equicalent to

Collection withAllSubclasses collect: [:each | each numberOfLinesOfCode ]

What happens below is that (unary) symbols are polymorphic with one
parameters blocks, i.e. they understand cull: and value:, which is
implemented as:

value: anObject
^anObject perform: self.

So in fact what will hapen is more like
Collection withAllSubclasses collect: [:each | each perform:
#numberOfLinesOfCode ]

... which is a bit slower than the traditional block version so you might
want to think if that makes a difference in your case.


You can use symbols whenever a unary block is expected, for example in most
collection enumerating methods, such as do:, select:, reject:, allSatisfy:,
detect:, ... (see 'enumerating' protocol in Collection class for more
examples).

All this methods send value: (or maybe cull:) to the received block
argument, so you can pass an unary symbol instead (or even whatever object
that understands value:).



On Mon, Sep 19, 2016 at 12:12 PM, frankl1_miky <mike1corporat...@gmail.com>
wrote:

> Hi,
>
> I'll like to know what is happening exactly in background when I'm using a
> symbol as in *Collection withAllSubclasses collect: #numberOfLinesOfCode*.
>
> I also want to know the other cases where I can use symbol.
>
> Is there any tutorial about using symbol?
>
> Thanks
>
>
>
> --
> View this message in context: http://forum.world.st/Using-
> symbol-tp4916159.html
> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
>
>

Reply via email to