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

Переменная, содержащая функцию

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

Например

myfunc = fn sqr x = x^2

После такого определения функцию, вычисляющую квадрат числа, можно вызвать и так

sqr z

и так

myfunc z

Поскольку по своей сути определение функции ничем не отличается от обычного выражения, то и само имя функции ничем не отличается от обычной переменной. В частности оно может быть локальным или глобальным. Можно так же определять одну функцию внутри другой. Например

fn PowSum x y =

( fn pow2 z = z^2; fn pow3 z = z^3

pow2 x + pow3 y

)

Данная функция вычисляет сумму квадрата первого параметра и куба второго. Внутри нее определены функции для вычисления квадрата (pow2) и куба(pow3) и, поскольку они локальны внутри функции PowSum, то вне ее вызываться не могут.

Параметры функций

Параметры функции, как уже упоминалось, могут быть позиционированными или именованными. Оформление именованных параметров отличается тем, что после них ставится двоеточие. После двоеточия может, но не обязательно, указываться значение по умолчанию. Например, приведенная функция создает заданное количество случайно расположенных сфер. В случае если количество сфер не указано, то их создается 50.

fn CreateSpheres Num:50

( local S

for i = 1 to Num do ( S = sphere( )

S.position = random [-100 , -100 , -100] [100 , 100 , 100]

)

)

Если в определении функции значение параметра по умолчанию не определено, а при вызове функции этот параметр не указан, то при вычислении тела функции тела функции в качестве значения этого параметра будет использоваться специальное значение – unsupplied. Например, ту же функцию SetColor с именованными параметрами можно переписать так.

mapped function SetColor obj:$* ObjColor: =

( if ObjColor = = unsupplied then obj.wireColor = random (color 0 0 0) (color 255 255 255)

else obj.wireColor = ObjColor

)

При использовании такой функции, если цвет объекта при обращении не указан, то объекту будет присвоен случайный цвет.

Следует отметить, что, определив параметры как именованные, Вы не сможете передать их функции, не указывая имени. Например, после вышеприведенного определения Вы уже не сможете вызвать функцию SetColor так

SetColor $* red

Теперь ее надо будет вызывать так

SetColor obj:$* ObjColor:red

Поэтому именованные параметры следует вводить только там, где это облегчит обращение к функции, а не наоборот.

Если функция имеет параметры обоих типов, то позиционированные параметры должны предшествовать именованным.

Принудительное завершение функции

Если необходимо выйти из функции до полного выполнения ее тела, то для этого применяется выражение return. После него должно быть указано выражение. В случае если функция будет завершена с помощью return, она вернет значение этого выражения. Например

fn div x y =

( if y = = 0 do return 0

x / y

)

Данная функция возвращает результат деления x на y, но если y равно нулю, то с помощью оператора return возвращается ноль.

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