float $N urn Points;
// Error: float $NumPoints; //
// Error: Invalid redeclaration of variable “SNumPoints” as a different type. //
С помощью Лингво можно перевести его как «неправильное переобъявление переменной $NumPoints другим типом данных». Суть ошибки в том, что нельзя, объявив однажды переменную одним типом, например int, затем объявить ее же другим типом данных, например string или float. Это касается текущего сеанса работы в MAYA, причем только для переменных, объявленных вне циклов или процедур, то есть вне фигурных скобок.
Лично меня такое поведение MAYA просто бесит. Причем, объявив переменную с определенным именем, нельзя ее «очистить» или “освободить». Команда clear действует только на массивы, да и очищает лишь их содержимое, не освобождая имя переменной для дальнейшего использования. Чтобы как-то призвать MAYA к порядку, расскажу, как можно избежать этого сообщения, работая в Script Editor.
Здесь следует упомянуть о таком понятии, как область видимости переменных. Пара фигурных скобок {} называется блоком. Все переменные, объявленные внутри блока, видны только внутри него. То есть объявив переменную внутри блока {например, в цикле) и попытавшись обратиться к ней вне блока (вне цикла), вы либо получите сообщение о неведомой переменной, либо MAYA молча заведет новую переменную, значение, которой никак не связано с переменной, объявленной внутри блока. Более того, написав, например, такие команды:
{
int $а=10; print $а; print “} - “;
}
int $а; print $а; вы получите два разных значения переменной с одинаковым именем:
- {10} -О
Дело в том, что при выходе за границы блока (за фигурные скобки) переменная «умирает» и становится невидимой.
Блок не обязательно должен принадлежать циклу или условному оператору if. Его можно открыть и закрыть в любом месте программы, используя фигурные скобки. Поэтому если, начав писать команды в Script Editor, вы поставите в самом начале открывающую фигурную скобку «{«, а в самом низу добавите закрывающую «}», то все команды в Script Editor окажутся внутри большого блока и будут освобождаться каждый раз после выполнения этого блока (не забывайте только выделять открывающую и закрывающую скобки, посылая команды на выполнение).
Скрипты и expressions. Различия и сходства Перед тем как переходить к написанию expressions, я бы хотел прокомментировать разницу между понятием скрипт и expression, причем разницу не только синтаксическую или функциональную, но и терминологическую.
Прежде всего, скрипты - это просто куски текста, сохраняемые на полках или в текстовых файлах и выполняемые по мере надобности.
Expressions - это объекты MAYA и, формально говоря - это ноды типа expression, являющиеся полноправными участниками сцены и хранящие в себе текст на языке MEL в виде одного из своих атрибутов.
Еще раз по поводу терминологии. Для избежания полной путаницы, употреблять термин «выражение- я не буду. Никто никогда так не говорит в русскоязычной «майской» среде, а если вы вдруг заявите, что заставили своего персонажа работать с помощью «выражений», окружающие подумают в первую очередь о крепких выражениях. Устная майская традиция предполагает употребление термина «экспрешен», обеспечивая стопроцентную однозначность трактовки. Я же ограничусь непереведенным написанием «expression» (так же, как loft или trim), предполагая, что произносить вы его будете, как положено, и все вас поймут при общении.