Perché non tutti e tre restituiscono il loro argomento non valutato come fa il primo? C'è un modo per far sì che gli ultimi due funzionino come il primo? All'interno della funzione, e non è ancora valutato, questo sembra accadere quando viene restituito il risultato.
names default to here(1);
ns = New Namespace("n");
foo = function({e}, Name Expr(e) );
ns:bar = function({e}, Name Expr(e) );
show( foo( expr( notavar ) ) ); // expected returns notavar, unevalauted
show( here:foo( expr( notavarhere ) ) ); // unexpected tries to evaluate notavarhere
show( ns:bar( expr( notavarns ) ) ); // unexpected tries to evaluate notavarns
All'interno della funzione, la variabile e non viene valutata, come previsto:
ns:bart = function( {e}, Show( Name Expr(e) ) );
ns:bart( expr( notavar ) ); // expected, unevaluated
Esiste una soluzione alternativa poco elegante che consiste nel copiare la funzione nello spazio dei nomi predefinito corrente, sebbene non risolva il problema delle chiamate di funzione annidate.
localbar = name expr( ns:bar );
show( localbar( expr( notavar ) ) ); // expected, unevaluated