For example, to encapsulate some variables and functions in a local context:
b: 1 a: context [ b: 2 inc: func [i [integer!] return: [integer!]][ i + b ] ] a/inc 5 ;-- will return 7Local variables take precedence other global ones with same name. This simple rule also applies to nested contexts, the nearest one has priority, e.g.:
a: context [ b: 123 c: context [ #enum colors! [red green blue] b: "hello" foo: func [print-line b] ] print-line b ;-- will output 123 c/foo ;-- will output hello ] print-line a/b ;-- will output 123 a/c/foo ;-- will output hello print-line a/c/b/2 ;-- will output e print-line a/c/blue ;-- will output 2
As you can see from this example, enumerations can also be defined locally to a context, but not only. Aliases and imported functions can also be defined locally too! With that powerful new feature, you can now modularize your Red/System programs simply and efficiently.
See the namespaces documentation for more features and info.
In this release you will also find several bugfixes, mainly for floats support. Thanks to Rebolek for his aggressive floats testing. ;-)