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

Пропуск проходов и принудительный выход из циклов

Оператор continue осуществляет мгновенный переход в конец цикла и начинает следующий проход.

Примеры:

for i=1 to 8 do (if i == 5 do continue; print i) -- печатает 1..4, 6..8

for i=1 to 8 collect (if i == 5 do continue; i) -- возвращает #(1, 2, 3, 4, 6, 7, 8)

while not eof do -- читает данные, пока не дойдет до конца файла

 (

 local line=readline f -- считывает одну строку

 if line[1] == “-” do continue -- если комментарий, переход на следующую строку

 line1=parser1 line -- вызов функции parser1

 processobjs line1 -- вызов функции processobjs

 )

            Оператор exit немедленно прекращает выполнение любого цикла, даже если тестовое выражение по-прежнему истинно. Он полезен при поиске ошибок в телах циклов. exit [with <expr>]

Пример:

while x < y do

(

            local delta = x – y

            if delta <= 0 then exit -- условие выхода

            $foo.pos.x = compute_x (foo / delta)

x += 0.1

)

Необязательный параметр with позволяет задать выражение, которому будет равно общее значение цикла, если он завершится преждевременно. Если его не задать, цикл, из которого вышли оператором  exit, возвратит значение undefined.

Выход из цикла for ... do с использованием параметра with <expr> возвращает значение OK.

Выход из цикла for ... collect с использованием параметра with <expr> возвращает массив величин, собранный на момент выхода.

 

 

Часть 2 Функции

[mapped] (function | fn) <name> { <parameter> } = <expr> , где <name> – имя функции, <expr> – тело функции, <parameter> – ее параметры (их может не быть вообще или быть несколько), которые записываются так: <parameter name>, либо так: <parameter name>: [<operand>] – необязательное значение по умолчанию, если не его задать, возвращается значениеunsupplied. Префих mapped означает, что функция будет автоматически повторно вызываться на каждом элементе коллекции, если колЧасть задана в качестве первого аргумента функции.

Примеры:

function add a b = a + b

fn factorial n = if n<=0 then 1 else n * factorial(n-1) -- рекурсивная функция

mapped function rand_color x =

x.wireColor = random (color 0 0 0) color (255 255 255)

 

fn starfield count extent: [200, 200, 200] pos: [0, 0, 0] =

(

local f = pos – extent / 2

t = pos + extent / 2

for i = 1 to count do

            sphere name:”star” \

            radius: (random 0.1 2.0) \

            position: (random f t) \

            segs:4 smooth:false

)

            В качестве своего значения функция возвращает значение <expr>. Если тело – блок, то значение последнего выражения в блоке. Если нужно найти функцию используется метод showSource <fn>, который отображает окно Editor с файлом, содержащим данную функцию и пролистанным до места ее определения – метод полезен, когда много функций находятся в разных файлах.

            Чтобы принудительно завершить выполнение функции используется оператор return <expr>, где <expr> – выражение, которому будет равно значение принудительно завершенной функции. Если return используется в функции с префиксом mapped и колЧасть задана в качестве первого аргумента, возвращаемое значение будет OK, а не <expr>.