use vor einem Scope kopiert Variablen in den Scope und blendet andere Variablen für diesen Scope aus. Damit entsteht eine anonyme Funktion, die unabhängig vom umgebenden Code ist und implizit gerufen wird. Sinn der Sache ist, dass sichergestellt wird, dass dieser Scope keine nicht aufgeführten Variablen modifiziert. Der Block kann also auch nachträglich eingefügt werden, um zu gucken, welche Variablen in dem Bereich genutzt werden. Variablen, die verändert werden sollen müssen per var übergeben werden. Primitive werden kopiert, Strukturen per const ref.
add is func( a, b is int )
{
c is int;
result is use a, b
{
c : 5; // Fehler, nicht sichtbar.
.d : 5; // Fehler, nicht sichtbar.
return a+b;
}
return result;
}
Use ist damit ein Syntactic Sugar für
add is func( a, b is int )
{
return code( a, b is int )
{
return a+b;
}( a, b );
}
Vorgeschlagen von Brion Will, https://www.youtube.com/watch?v=QM1iUe6IofM, ca. 42:00, er schlägt das „use“ als Schlüsselwort vor, was durchaus überlegenswert ist. (geändert, ursprünglich copy a,b {})
Ein solcher Block wäre gut mit section zu kombinieren:
add if code(a,b is int)
{
section "Calculation"
return use a, b
{
return a+b;
}
}
Ein return innerhalb von use verlässt lediglich den Use-Scopes und nicht die Funktion, in der der Use-Block enthalten ist.