Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MAXScript Part 2.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
89.09 Кб
Скачать

Приоритет вызова функций

Следует отметить, что операция выполнения функции является приоритетной, и если Вы хотите найти синус от x + 1, то не следует писать

sin x + 1

В этом случае MAXScript сначала найдет синус от x, а затем прибавит к получившемуся значению 1. В подобном случае надо писать примерно так

sin (x + 1)

atan2 (x + 1) (y – 2)

Единственное исключение – унарный минус. Выражение

sin -x

будет выполняться так, как это и ожидается – вычислит значение синуса от переменной x с обратным знаком.

Написание вызова функции в несколько строк

Вообще-то в MAXScript каждая новая строка текста представляет собой отдельное выражение, но при вызове функции с большим числом параметров можно, для улучшения читаемости, записать этот вызов в несколько строк.

sphere radius:16 segs:32 \

smooth:true hemisphere:0.5 \

chop:0

Знак обратного слеша “\” в конце строки указывает интерпретатору, что переход на другую строку в данном случае не означает конец выражения и начало нового. Общие правила записи выражений в несколько строк будут рассмотрены несколько позже.

Другой способ вызова функций

Функции в MAXScript можно вызывать не по имени, а с помощью переменной, которая содержит имя вызываемой функции. Например, можно написать такой скрипт

SinFunc = sin

y = SinFunc x

При этом вторая строка вычислит и присвоит переменной y значение синуса x.Такая экзотическая возможность может использоваться не только для переименования функций, но и для того чтобы передать одну функцию другой в качестве параметра. Представьте себе, что Вы написали функцию FindMin, которая вычисляет минимум любой функции на заданном отрезке. Вполне логично, что если Вам надо найти минимум функции синуса на отрезке от x1 до x2, то, продолжая вышеприведенный скрипт, к такой функции можно было бы обратится так

FindMin SinFunc x1 x2

Блоковые выражения

Часто бывает необходимо сгруппировать несколько простых выражений в одно. Для этого группу объединяемых выражений заключают в круглые скобки. Выражения, составляющие сложное, или как его еще называют, блоковое выражение, обычно записываются каждое на новой строке, например

( x = 6

y = 7

z = 10

)

но допускается записывать их и на одной, разделяя знаком “;

( x = 6; y = 7; z = 10 )

Можно так же смешивать обе формы записи

( x = 6

y = 7; z = 10 )

Блоковое выражение возвращает результат последнего выполненного в нем простого выражения. Например, после выполнения такого скрипта

a = ( x = 6; y = 7; z = 10)

переменная a получит значение 10.

Допускается, как это ни странно, пустое блоковое выражение, которое возвращает значение undefined, и записывается так

a = ( )

Применять его можно для временной записи, с тем, чтобы после отладки остальной части скрипта, вернуться к нему и вписать туда то, что нужно.

При работе с блоковыми выражениями следует быть внимательным с локальными переменными, и вдвойне, если блоковые выражения вложены друг в друга. Рассмотрим пример

a = 1

( local a = 2

print a

( local a = 3

print a

)

print a

)

print a

В результате выполнения такого скрипта, на экране интерпретатора появится следующий результат

1 -- Первая строка

2 -- Вторая строка

3 -- Третья строка

3 -- Четвертая строка

3 -- Пятая строка

1 -- Шестая строка

1 -- Седьмая строка

В первой строке выведен результат присвоения единицы глобальной переменной a. Далее начинается блоковое выражение, в котором объявляется локальная переменная a. Ей присваивается значение 2, которое и выводится на экран функцией print. Результат выведен во второй строке. После этого снова начинается блоковое выражение второго уровня вложенности, в котором определяется локальная переменная а, ей присваивается значение 3, которое выводится на экран, см. третью строку. Затем второе блоковое выражение завершается, и логично было бы ожидать, что переменная a вернется к старому значению 2. Ничуть не бывало, и значение в четвертой строке красноречиво свидетельствует об этом. Как видите, она сохранила значение 3. В пятой строке выведен результат, возвращенный блоковым выражением после его завершения. Вот теперь переменная a вернется к своему старому значению 1, и напечатает его в шестой строке. Седьмая строка – результат, возвращенный функцией print.

Хорошим тоном программирования считается явно объявлять все локальные переменные, использованные в блоковом выражении с помощью операции local в первой строке этого выражения.

Следует так же отметить, что MAXScript поддерживает неявное объявление переменных, что так же может быть источником ошибок. Например

( local VariableWithVeryLongName

VariableWithVeryLongNam = 1

x = sin VariableWithVeryLongName

)

Объявление переменной с очень длинным именем VariableWithVeryLongName локальной не спасает нас от того, что при присвоении ей значения можно ошибиться в названии. Языки Паскаль или C выдали бы ошибку на этом операторе, но MAXScript спокойно заводит новую локальную переменную с ошибочным именем. При использовании уже верного написания переменной можно получить сколь угодно неожиданные результаты. Если, как в приведенном примере, выражение короткое, то найти ошибку не составит труда. В более длинном и сложно организованном выражении это может стоить времени и нервов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]