[1/9] from: cavallieri:carlo:gm:ail at: 16-Feb-2006 16:00
Hi, on AltMe i read about factor language (factorcode.org). Also factor it is based on word, word that make things(function), in addition it has dictionaries (vocabularies), similar to namespaces Just for curiosity, why rebol does not have a namespaces systems? If i have two identical word, how can i use the second without delete (replace) the first?
[2/9] from: SunandaDH:aol at: 16-Feb-2006 12:10
> If i have two identical word, how can i use the second without > "delete"(replace) the first?
Namespaces have been whispered as part of REBOL 3.0, but no date for that. The nearest equivalent is objects (aka contexts): context1: make object! [var1: 10] context2: make object! [var1: 100] print context1/var1 + context2/var1 Sunanda.
[3/9] from: cavallieri::carlo::gmail::com at: 16-Feb-2006 21:15
Ok, so it's only a "next feature" and not a thing that rebol will nerver see for "design decision" Hope to see Namespaces soon :) 2006/2/16, SunandaDH-aol.com <SunandaDH-aol.com>:
[4/9] from: anton::wilddsl::net::au at: 17-Feb-2006 12:47
Hi Cavva, As Sunanda pointed out, we use objects all the time for this. eg: make object! [print: "lost!"] It looks in the above example that we have redefined the word 'print. We have, but only the 'print in that object. The value of 'print in the default, global context is still the same and so 'print evaluates as usual. In the following example I am binding a block of words to a particular context. Those words which are found in the context will be bound to the context. The rest of the not-found words will keep their current binding: a: "global" b: "global" ctx: context [b: "local"] print bind [a b] ctx ;---> global local You can bind huge chunks of code if you like. This gives the same result as above: do bind [print [a b]] ctx ;---> global local Also if you want to get just one word out of a particular object, you can use IN and GET: print get 'a ;---> global print get in ctx 'b ;---> local Anton.
[5/9] from: cavallieri:carlo:gma:il at: 17-Feb-2006 9:36
Thanks Anton, your response was very useful and interesting. But, if I want to use different word defined in different context, i must write something like: print bind [a] ctx1 print bind [b] ctx2 print bind [c] ctx3 Am I wrong? I think that some like using: [ 'ctx1 'ctx2 'ctx3 ] print a print b print c would be more easy 2006/2/17, Anton Rolls <anton-wilddsl.net.au>:
[6/9] from: greggirwin:mindspring at: 17-Feb-2006 9:52
Hi Cavva, C> But, if I want to use different word defined in different context, C> i must write something like: C> print bind [a] ctx1 C> print bind [b] ctx2 C> print bind [c] ctx3 C> Am I wrong? You can use path notation print [ctx1/a ctx2/b ctx3/c] You can also use IN to get a word bound to a context; and gurus do all kinds of tricky stuff when it comes to binding. REBOL has very few limits on how you can make things work. -- Gregg
[7/9] from: lmecir:mbox:vol:cz at: 17-Feb-2006 18:29
>Thanks Anton, your response was very useful and interesting. >But, if I want to use different word defined in different context,
<<quoted lines omitted: 9>>>print c >would be more easy
that is quite easy to accomplish, here is how: using: func [ [throw] context-block [block!] body [block!] ] [ foreach context context-block [bind body in context 'self] do body ] ctx1: context [a: 11] ctx2: context [b: 12] ctx3: context [c: 13] using reduce [ctx1 ctx2 ctx3] [ print a print b print c ] HTH -L
[8/9] from: cyphre::seznam::cz at: 17-Feb-2006 18:38
You can do even such 'confusing' things :-)
>> ctx1: make object! [value: 10] >> ctx2: make object! [value: 20] >> ctx3: make object! [value: 30] >> blk: copy 
>> repeat n 3 [append blk in get to-word join 'ctx n 'value]
== [value value value]
== [value value value]
>> reduce blk
== [10 20 30]
[9/9] from: cavallieri::carlo::gmail::com at: 17-Feb-2006 21:01
Really great solution !! thanks, thanks to all. 2006/2/17, Ladislav Mecir <lmecir-mbox.vol.cz>:
- Quoted lines have been omitted from some messages.
View the message alone to see the lines that have been omitted