Привет!
В этом уроке я попытаюсь объяснить вам работу оператора tagof. Удивительно, но копаясь на форуме, не заметил ни одной статьи посвященный данному оператору.
Перед тем как начать изучать работу данного оператора давайте разберёмся, для чего он нужен и где его использовать?
Дело в том, что частота использования данного оператора в библиотеках выше, чем в скриптах. Это обуславливается тем, что он необходим только для определения тега у константы, переменной или функции. Поэтому вы вряд ли встретите его в каком-либо скрипте/моде.
Влияет ли он на скорость?
Он вычисляется на этапе компиляции. Таким образом, можно утверждать, что код не может быть медленнее или быстрее из-за константного числа.
Как же использовать данный оператор?
Оператор прост в использовании. Например, для определения идентификатор тега, после названия тега необходимо указать двоеточие. Для функций, переменных, констант ничего указывать не надо.
Давайте рассмотрим пример:
PHP код:
stock SomeFunction({bool,_}:var1, tag = tagof(var1))
{
if (tagof(bool:) == tag) {
print("boolean");
} else if(tagof(_:) == tag) {
print("int");
} else {
}
}
Таким образом, при вызове функции, например, со значением и тегом bool, нам выведет сообщение "boolean". Если же мы укажем, например, цифру или переменную без тега, то получим сообщение "int".
Существуют ли баги?
К сожалению, баги есть и они не исправлены в версии 3.x (Thanks Kalcor).
На данный момент, я знаю лишь два бага связанных с данным оператором:
- При указании tagof в метке конструкции switch будет ошибка.
PHP код:
// Ошибочный код.
switch (...)
{
case tagof(var1):
{}
}
Для того чтобы избежать данную ошибку необходимо обособить данный оператор круглыми скобками:
PHP код:
// Правильный код.
switch (...)
{
case (tagof(var1)):
{}
}
Примечание: в версиях 4.x это было исправлено (
другие исправления новых версий)
- Ошибка при указании оператора tagof без круглых скобок.
Очень странно, но при использовании оператора sizeof такой проблемы не наблюдается:
PHP код:
new size = sizeof array;
Автор:
VVWVV
Исключительно для pro-pawn.ru
Копирование данной статьи на других ресурсах без разрешения автора запрещено!