Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: Limitation coming from the "initialize" refinement used with the "Ar

From: ingo:2b1 at: 27-Jun-2002 9:16

Hi Gerard, Gerard Cote wrote:
> Hello,
<...>
> Here is my example code ( I tried it directly at the concole) : > > tab_nbr: array/initial [3 2] 0 cells contents are all initialized to > the 0 value > L: 2 > C: 1 > tab_nbr/2/1: 10 cell content [2 1] is updated to 10 > print tab_nbr/:L/:C I verify that all is OK > > tab_nbr/:L/:C: 20 But this one doesn't work, so I > dynamically generated the real line and asked > REBOL to execute it. > The wanted expression was > : tab_nbr/2/1: 20 > and this can be given by > join join join join "tab_nbr/" L join "/" C ": " 20 > which generates > "tab_nbr/2/1: 20" then the "do" word will do it like this.
There are a lot of ways to make this work, but sometimes it pays to think about what arrays really are: blocks of blocks, so the most elegant solution (IMO) is to use change at tab_nbr/:L C 20 And, btw, it is _much_ faster:
>> profiler/test [do join join join join "tab_nbr/" L join "/" C ": "
20] 1000000 == [0:01:07.580636]
>> profiler/test [change at tab_nbr/:L C 20] 1000000
== [0:00:02.855449] <...>
> While I am at it, I also tried to use the word "reduce" and a to-block > conversion instead of the word "do" but it seems that the refered object > (tab_nbr) is not in the same context. > > So is there a way to notify REBOL that we want it to share some valuable > information from a context to another one or do we have to define it for the > global one, which in this case is not under my control
Yup, it's 'bind.
>> reduce bind to-block join join join join "tab_nbr/" L join "/" C ":
30 'tab_nbr == [[30 0]]
>> tab_nbr
== [[0 0] [30 0] [0 0]] 'bind has two paramters, the block you want to run in a differrent context than its default, and a word from the context you want it to run in. I hope that helps, Ingo -- To unsubscribe from this list, please send an email to [rebol-request--rebol--com] with unsubscribe" in the