On 19 January 2013 21:04, Benjamin <[email protected]> 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 <[email protected]> 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.
