Hi Gregg, > Regarding use of 'protect: Can you protect an entire context, or the words > *in* a context? I haven't figured out how to do that yet. >
PROTECT basically adds a protected flag to a word value. A REBOL value of datatype word includes a pointer to its context. The use of PROTECT will protect the word in that context. The argument to PROTECT can be either a word or a block of words. For contexts created by the function USE, which creates a local context for execution of a block of code, the use of PROTECT is straightforward: >> use [a] [a: 1 protect 'a loc-a: does ['a]] We have created a local context with the word 'a' being the only local variable. In the code block we create a global function LOC-A which returns the local word 'a', so that we can see what's happening. The word 'a' is both private and (after the PROTECT 'a) protected. >> a: 52 == 52 The global word 'a' is set to 52. >> loc-a == a >> get loc-a == 1 We can access the value of the local 'a'. But it is protected from change. >> set loc-a 2 ** Script Error: Word a is protected, cannot modify ** Near: set loc-a 2 But because we have the word, we can use the UNPROTECT function on it. >> unprotect loc-a >> set loc-a 2 == 2 >> get loc-a == 2 For local contexts created by MAKE FUNCTION! and MAKE OBJECT! the situation is more complex and the usefulness of PROTECT is limited. BTW In future, with REBOL/Core 3.0, we have been told that REBOL will have modules, which should alleviate most of the currently existing namespace issues. -Larry -- To unsubscribe from this list, please send an email to [EMAIL PROTECTED] with "unsubscribe" in the subject, without the quotes.
