Добавлен GetLocalPlayer,
опубликован
vJass
Содержание:
Статичные условия объявляются посредством ключевого слова static, перед ключевым словом if:
static if conditions then
// ...
else
// ...
endif
Они имеют 2 основных отличия от обычных условий:
- Выражения внутри статичных условий могут состоять только из логических констант и операторов and/not
- Проверка статичных условий выполняется на этапе компиляции - блок кода, не удовлетворяющий условию, будет исключен из кода карты
globals
constant boolean MY_BOOLEAN = true
endglobals
function MyFunc takes nothing returns nothing
static if MY_BOOLEAN then
call BJDebugMsg("The constant has a value of TRUE!")
else
call BJDebugMsg("The constant has a value of FALSE!")
endif
endfunction
В представленном выше примере, в зависимости от значения константы MY_CONSTANT, во время компиляции будет удален блок кода не соответствующий условию.
В предыдущем параграфе мы говорили об опциональных зависимостях библиотек и специальной константе LIBRARY_Name, так давайте посмотрим, как это можно использовать в сочетании со статичными условиями:
library A uses optional B
function fun takes nothing returns nothing
local unit u = GetTriggerUnit();
static if LIBRARY_B then
call B_Remove(u);
else
call KillUnit(u);
endif
endfunction
endlibrary
library B
public function Remove(unit u)
call BJDebugMsg("Unit kill!");
call RemoveUnit(u);
endfunction
endfunction
Согласно нашему условию, если в коде карты присутствует библиотека B, парсер сохранит строку вызова функции Remove, а вызов функции KillUnit будет удален из кода. Ну а в случае отсутствия востребованной библиотеки, вместо специальной функции Remove библиотеки B, будет использована стандартная нативка KillUnit.
Если бы мы не воспользовались статичным условием, то компилятор бы по прежнему не выдал ошибку, в случае отсутствия библиотеки B, однако, возникла бы ошибка компиляции при попытке найти функцию B_Remove.
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.