Команда &

Выполняет макроподстановку.

Синтаксис

& MemVarName [.cExpression]

Параметры
& MemVarName
Задает имя переменной памяти или элемента массива, указываемого в макроподстановке. Нельзя указывать в имени префикс M., которым переменные памяти отличаются от полей. Это вызовет синтаксическую ошибку. Длина имени не может превышать максимальной допустимой в Visual FoxPro длины оператора.
В подстановке не допускаются рекурсивные ссылки переменной на саму себя. Например, в следующем случае будет сгенерировано сообщение об ошибке:

STORE '&gcX' TO gcX
? &gcX

Операторы макроподстановки, фигурирующие в командах DO WHILE, FOR и SCAN, вычисляются только в начале цикла и при последующих итерациях не пересчитываются. Любые изменения в переменной памяти или элементе массива, происшедшие за время работы цикла, не распознаются.

cExpression
Необязательный аргумент cExpression с разделителем в виде точки (.) используется для присоединения к макрокоманде дополнительных символов. При этом в качестве cExpression можно указать еще одну макрокоманду.

Комментарии
Операция макроподстановки рассматривает содержимое переменной памяти или элемента массива как строковый литерал. Если перед переменной памяти символьного типа или элементом массива стоит знак &, в качестве ссылки в макрокоманде подставляется содержимое переменной или элемента массива. Макроподстановку можно использовать в любой команде или функции, допускающей задание строкового литерала.
Совет По мере возможности старайтесь использовать вместо макроподстановки выражение имени. Такое выражение действует как макроподстановка, но оно может передавать в качестве имен только символьные строки. Употребляя выражение имени, вы значительно ускорите процесс обработки команды или функции, допускающей задание имени (имени файла, имени окна, имени меню и т.д.). Подробнее о выражениях имени см. главу 2 "Обзор языка программирования" Руководства разработчика.
Следующие команды являются допустимыми:

STORE 'customer' TO gcTableName
STORE 'company'  TO gcTagName
USE &gcTableName ORDER &gcTagName

но лучше воспользоваться выражением имени:

USE (gcTableName) ORDER (gcTagName)

Макроподстановка оказывается полезной, если необходимо заменить ключевое слово в команде. В следующем примере значение установки TALK сохраняется в переменной памяти, чтобы впоследствии программа смогла его восстановить. Исходное значение TALK восстанавливается с помощью макроподстановки.

Пример

STORE SET('TALK') TO gcSaveTalk
SET TALK OFF
*
*  Additional program code
*
SET TALK &gcSaveTalk  && Restore original TALK setting

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.