В чем разница между встроенной функцией FUNCTION и надстройкой FUNCS? - PullRequest
2 голосов
/ 17 июля 2010

В 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 здесь, в библиотеке, созданной Ladislav Mecir.Чем он отличается и имеет ли он те же недостатки?

http://www.fm.vslib.cz/~ladislav/rebol/funcs.r

1 Ответ

3 голосов
/ 17 июля 2010

Основное отличие состоит в том, что FUNCTION выполняет глубокий поиск заданных слов в теле, в то время как FUNCS просто ищет их.FUNCS также использует немного другую спецификацию.

FUNCS существует уже довольно давно (правда, смена имени произошла не так давно).

Это ЗНАЧЕНИЕ?Функция «проблема» связана с тем, что локальные переменные функций (даже если вы используете FUNC с / LOCAL для явного их объявления) инициализируются в NONE.Что вызывает ЗНАЧЕНИЕ?функция для выдачи ИСТИНА, даже когда переменные "еще не инициализированы".

Как правило, я не считаю это "инициализированным с NONE" "большим делом", хотя это поведение отличается отглобальные или объектные переменные

...