Вот тут - http://18delphi.blogspot.ru/2013/11/gui-3.html я писал про слово "между".
А что делать если кто-то захочет вызвать его вот так:
?
Компилятор это - спокойно "переварит", но код будет выполняться с ошибками.
Да ещё и на стеке значений будут накапливаться "паразитные значения".
Как этого избежать?
На этот случай у нас есть "специальные" слова "для контроля за стеком значений".
Слова :
#BeginControlStack - начинает контроль стека (рекурсивно)
#EndControlStack - заканчивает контроль стека (рекурсивно) и проверяет, что верхушка стека сдвинулась на выражение указанное в лямбде.
Как это применяется?
А вот так:
Тогда код:
- нормально выполнится.
А код:
- поднимет ошибку.
На самом деле есть техника проверки количества передаваемых параметров при компиляции скриптов.
Но это - отдельная тема.
Об этом я ОБЯЗАТЕЛЬНО напишу - но чуть позже.
А что делать если кто-то захочет вызвать его вот так:
2 между ( 2 5 10 )
?
Компилятор это - спокойно "переварит", но код будет выполняться с ошибками.
Да ещё и на стеке значений будут накапливаться "паразитные значения".
Как этого избежать?
На этот случай у нас есть "специальные" слова "для контроля за стеком значений".
Слова :
#BeginControlStack - начинает контроль стека (рекурсивно)
#EndControlStack - заканчивает контроль стека (рекурсивно) и проверяет, что верхушка стека сдвинулась на выражение указанное в лямбде.
Как это применяется?
А вот так:
BOOLEAN WORDWORKERFUNCTION "строго между" INTEGER IN anX INTEGER VAR "Нижняя граница" INTEGER VAR "Верхняя граница" #BeginControlStack // - начинаем контроль стека WordToWork // - слово справа, а на самом деле может быть "последовательность слов", за счёт оператора "скобки" (о нём я расскажу позже) DO // - вычисляем переданное слово #EndControlStack ( 2 == ) // - заканчиваем контроль стека и убеждаемся, что на стек попало РОВНО 2 значения =: "Верхняя граница" // - снимаем со стека верхнюю границу =: "Нижняя граница" // - снимаем со стека нижнюю границу ( anX больше "Нижняя граница" ) И ( anX меньше "Верхняя граница" ) =: Result END // "строго между"
Тогда код:
2 между ( 2 5 )
- нормально выполнится.
А код:
2 между ( 2 5 10 )
- поднимет ошибку.
На самом деле есть техника проверки количества передаваемых параметров при компиляции скриптов.
Но это - отдельная тема.
Об этом я ОБЯЗАТЕЛЬНО напишу - но чуть позже.
Комментариев нет:
Отправить комментарий