為什麼這三個函數不像第一個函數一樣傳回未求值的參數?有沒有辦法讓後兩個函數也像第一個函數一樣運作?在函數內部,e 仍然是未求值的,這似乎是在傳回結果時發生的。
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
如預期的那樣,函數內部的 e 沒有被求值:
ns:bart = function( {e}, Show( Name Expr(e) ) );
ns:bart( expr( notavar ) ); // expected, unevaluated
雖然將函數複製到目前預設命名空間是一種不太理想的解決方法,但這並不能解決巢狀函數呼叫的問題。
localbar = name expr( ns:bar );
show( localbar( expr( notavar ) ) ); // expected, unevaluated