Nova Ordis Generic Variable and Expression System: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
No edit summary
Line 34: Line 34:


upper.enclose(intermediate);
upper.enclose(intermediate);
intermediate enclose(lower);
intermediate.enclose(lower);


intermediate.declare("color", String.class, "blue");
intermediate.declare("color", String.class, "blue");


assertNull(upper.getVariable("color"));
assertNull(upper.getVariable("color"));
assertEquals("blue", intermediate.getVariable("color"));
assertEquals("blue", intermediate.getVariable("color").get());
assertEquals("blue", lower.getVariable("color"));
assertEquals("blue", lower.getVariable("color").get());


</syntaxhighlight>
</syntaxhighlight>

Revision as of 04:52, 14 September 2017

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.The same variable 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());