On Tue, 11 Sep 2018 at 02:44, PBKResearch <peter@pbkresearch.co.uk> wrote:
Hi All
This is an idiot question, I should know the answer, but I have looked around and canât find relevant documentation. Iâm not asking for a full answer, just a pointer as to where to start looking.
I have seen from examples in this forum that an expression like the following:
paras collect: [para| para prettyPrinted]
can be written more concisely as:
paras collect: #prettyPrinted
which obviously works when I try it. It doesnât seem to fit in with the definition of #collect:, which requires a block as argument. Where can I find the relevant definition, either in method comments or in some general manual? Can the notation be extended,
Its not special notation. Just a normal object (a Symbol) passed via a normal message.
for example to #select: - obviously with an argument which returns a Boolean? Can it be used with a method which requires an argument, e.g. as myArray collect: (#myMethod: arg)? Are there any other extensions?
Any help gratefully received.
Peter Kenny
Full answer ;) Its a combination of the following two methods... Collection >> collect: aBlock | newCollection | newCollection := self species new. self do: [:each | newCollection add: (aBlock value: each)]. ^ newCollection Symbol value: anObject ^anObject perform: self. When /aBlock/ is a symbol, that symbol is performed on /each/ element. And looking at #select: , yes it works the same... Collection >> select: aBlock | newCollection | newCollection := self copyEmpty. self do: [ :each | (aBlock value: each) ifTrue: [ newCollection add: each ]]. ^newCollection cheers -ben