Nova Ordis Generic Variable and Expression System
Internal
Overview
The implementation of a generic variable system. Variables are scoped, typed and named placeholders for values. Variable instances can only be created by declaring them in a scope, with Scope.declare(). Once declared in a scope, the variable is available to all enclosed scopes, but not to the enclosing scopes.The same variable - a variable with the same name - may be declared in more than one scope, and may have different values in different scopes.
Values are assigned to a variable with set() and retrieved with get(). The value of a variable may be null.
Variable Names
A variable name must start with a letter and consists in letters, digits, '_' and '-', and must not belong to the set of reserved names.
Example
Scope s = new ScopeImpl();
Variable<String> v = s.declare("color", String.class, "blue");
Scopes and Visibility
Once a variable is declared in a scope, it becomes visible to all enclosed scopes (scopes that have this scope as parent) but it is not visible to this scope's enclosing scopes.
Scope upper = new ScopeImpl();
Scope intermediate = new ScopeImpl();
Scope lower = new ScopeImpl();
upper.enclose(intermediate);
intermediate.enclose(lower);
intermediate.declare("color", String.class, "blue");
assertNull(upper.getVariable("color"));
assertEquals("blue", intermediate.getVariable("color").get());
assertEquals("blue", lower.getVariable("color").get());