В Rebol 3 есть новая реализация FUNCTION, которая позволяет автоматически связывать переменные с локальный контекст по умолчанию.
У FUNCTION проблема со значением VALUE? test, поскольку он возвращает TRUE, даже если переменная еще не была установлена во время выполнения:
foo: function [] [
if value? 'bar [
print [{Before assignment, bar has a value, and it is} bar]
]
bar: 10
if value? 'bar [
print [{After assignment, bar has a value, and it is} bar]
]
]
Если вы позвоните в FOO, вы получите:
Before assignment, bar has a value, and it is none
After assignment, bar has a value, and it is 10
FUNC работает не так (он говорит только о том, что BAR имеет значение после присваивания). Но тогда FUNC не делает переменные автоматически локальными.
Я нашел примитив FUNCS здесь, в библиотеке, созданной Ладиславом Мечиром. Чем он отличается, и есть ли у него такие же недостатки?