Переменные
Плагин оперирует двумя типами переменных — внутренними и переменными окружения. Внутренние переменные видимы только в плагине, а переменные окружения доступны для Total Commander и запускаемых из него программ.
Имя внутренней переменной может состоять только из латинских букв, цифр и символа подчёркивания «_». Имя внутренней переменной не может начинаться с цифры.
Имена переменных окружения могут содержать любые символы (за исключением «=»), но значения таких переменных могут быть прочитаны только с помощью функции GetEnv. Чтобы переменную окружения можно было читать как обычную переменную, её имя должно состоять только из латинских букв, цифр и символа подчёркивания «_».
Переменные окружения устанавливаются только командой SetEnv и не могут быть записаны другим способом. Как следствие, они не могут служить переменными для циклов, им нельзя присваивать значения в выражениях, использовать в качестве переменной для возврата значений из команд и т. д.
Диапазон действия
Внутренние переменные в Autorun имеют диапазон действия — глобальный или локальный. Диапазон действия устанавливается с помощью ключевых слов Global и Local. Локальные переменные действуют только внутри функций, глобальные — во всем скрипте. Помимо этого внутренняя переменная может быть определена как константа с помощью ключевого слова Const, тогда после первоначального определения изменить её будет нельзя.
Global [Const] Var1 [= expr] [, Var2 [= expr] .. [, VarN [= expr]] Local [Const] Var1 [= expr] [, Var2 [= expr] .. [, VarN [= expr]]
Примеры:
Global Const MYGLOBALCONST1 = 123, MYGLOBALCONST2 = 456 Func MyFunc() Local MyLocalVar EndFunc
Одновременно не могут существовать переменные окружения и внутренние глобальные переменные с одинаковым именем. Autorun не даст создать глобальную переменную с именем существующей переменной окружения, и наоборот.
Обратите внимание, что при использовании Local в основном теле скрипта переменная всё равно будет создана в глобальном диапазоне.
Также возможно присваивать значения переменным без предварительного указания диапазона действия:
Var1 = expr Var2 = expr
Если ключевые слова Global или Local не заданы, то правила следующие:
- Если существует глобальная переменная с таким же именем, то при присваивании в рамках функции будет изменено значение этой переменной. После выхода из функции изменённое значение будет доступно для последующих операций.
- Если не существует, то создаётся локальная переменная.
var1 = 1 var2 = 1 MyFunc() Func MyFunc() Local var1 = 123 var2 = 123 Global var3 = 123 var4 = 123 Local var5 = 123 EndFunc var1 --> 1 var2 --> 123 var3 --> 123 var4 --> undefined var5 --> undefined
Будьте внимательны при использовании необъявленных переменных в функциях. Если планируется использовать переменную только в пределах функции, то во избежание возможных ошибок рекомендуется всегда явно объявлять её в локальном диапазоне.
Статические переменные
Статические переменные — это переменные, инициализирующиеся только один раз и сохраняющие свое значение между вызовами функции на протяжении всего времени выполнения скрипта. Имеют смысл только в функциях. Статическая переменная задается с помощью ключевого слова Static:
Static Var1 [= expr] [, Var2 [= expr] .. [, VarN [= expr]]
a = MyFunc() # --> a = 2 a = MyFunc() # --> a = 3 a = MyFunc() # --> a = 4 Func MyFunc() Static var = 1 var = var + 1 Return var EndFunc
При задании статической переменной в основном теле скрипта она ничем не будет отличаться от глобальной переменной.
Обратите внимание, что при вызове функции из разных потоков будут использоваться одни и те же переменные!
Использование переменных в командном синтаксисе
Внутренние переменные задаются командой Set, а переменные окружения — SetEnv. При использовании переменных в командах Autorun не делает между ними принципиального различия и может получать их значения как из тех, так и других, однако запись из команд возможна только во внутренние переменные (очевидное исключение — SetEnv).
При использовании переменных в командах следует придерживаться простого правила: если значение переменной читается («разворачивается»), то переменная должна быть записана с использованием обрамляющих символов «%». Если же в переменную производится запись (команды Set, SetEnv и некоторые другие), то её имя записывается как есть. Пример:
Set MY_COMMANDER_PATH %COMMANDER_PATH%
В примере выше значение переменной окружения COMMANDER_PATH будет прочитано и записано в переменную MY_COMMANDER_PATH.