On 19 January 2013 21:04, Benjamin <benjamin.vanryseghem.pharo@gmail.com> wrote:
Writing this
block := [:val | val >0 ifTrue: [ self logCr: val. block value: val -1 ] ifFalse: [ 'foo' ]].
block value: 3
works in a workspace :)
well, this is the most trivial example. :) (frankly i didn't even thought about it as a case, because one of the requirements is to not refer to the block via variable).. in this case, you still referring to it, but just moved variable declaration outside of the block scope. But of course, this is most usable form (apart from just using method).
Ben
On Jan 19, 2013, at 8:56 PM, Igor Stasenko wrote:
On 19 January 2013 03:38, Sean P. DeNigris <sean@clipperadams.com> wrote:
gerard wrote
Hi.
Excuse me for my poor english.
I need, for recursive requirements, call a block inside the same block. That's possible on Smalltalk?
Integer>>benchFib
For example:
"fibonacci function" [:fnc :n1 :n2 :limit :numbers | numbers add: n1. (n2 < limit) ifTrue: [ fnc valueWithArguments: {fnc . n2 . (n1 + n2) . limit . numbers}. numbers ]].
The objetive is use that block without the :fnc parameter.
[:param | param >0 ifTrue: [ thisContext closure value: param - 1 ]
] value: 5
but this will be much slower than just use recursion with methods because of thiscontext.
Regards
-- Best regards, Igor Stasenko.
-- Best regards, Igor Stasenko.