[REBOL] Re: R: Re: Variable not avilable out of a foreach
From: henrik::webz::dk at: 11-Dec-2007 17:17
On 11/12/2007, at 17.02, Giuseppe Chillemi wrote:
>
>> 3) Modify the function body.
>>
>> get_data: does [...]
>> ...
>> foreach line database [
>> bind second :get_data 'line
>> get_data
>> ]
>>
>> 4) Make your own variety of foreach which does not create its
>> own context but uses words with existing bindings.
>
> Solution 1 and 2 where already taken into consideration and used. I
> was
> searching for a reason and you gave it to me. Reallu thank you.
> Solution 3 is for PRO-develpers. I'll mark you message for a deeper
> study
> when I'll fully understand the inner working of rebol.
> Solution 4... Ehm.. Have already told you I am not one of the PRO-
> Developers
> ? :-)
>
> Giuseppe Chillemi
Learn about REBOL bindings and contexts. That lets you do some neat
tricks.
The FOREACH line creates its own context inside the loop block and
LINE for FOREACH is bound to that context. If you begin using a
function that holds its own LINE as well, that LINE is not bound to
the same context, but is global:
line: none ; global LINE
print-line: does [print line]
foreach line database [ ; a different LINE in its own context
print-line ; will not work, just prints "none"
]
Solution 1 and 2 work because you are feeding a value from the FOREACH
context into the function directly, instead of using the word.
Solution 3 alters the context of the function, which is probably (?)
slower than 1.
Solution 4 I wouldn't do. :-)
--
Regards,
Henrik Mikael Kristensen