
- •С чего начать
- •Переменные и присвоение им значений
- •Области видимости
- •Настойчивые переменные
- •Изменяемый тип переменных
- •Присвоение значения по ссылке
- •Выделение памяти и уборка мусора
- •Имена переменных
- •Литералы
- •Числовые литералы
- •Строковые литералы
- •Литералы времени
- •Литералы имен объектов
- •Литералы точек в двумерном и трехмерном пространстве
- •Литералы массивов
Настойчивые переменные
Именно так “настойчивый”, переводится с английского слово persistent. Более подробный словарь дает, правда, перевод “постоянный”, но “постоянные переменные” звучит диковато. Настойчивость их заключается в том, что глобальные переменные, объявленные со словом persistent, запоминаются при сохранении сцены в файл и восстанавливаются при открытии этого файла. Впрочем, отделаться от этих настырных объектов не трудно, достаточно выполнить скрипт
persistents.remove <имя переменной>
При этом сама переменная никуда не девается, просто перестает быть настойчивой. А если вы хотите, чтобы все настойчивые переменные перестали быть таковыми, достаточно выполнить
persistents.removeAll()
Если же Вас интересует список всех настойчивых переменных, то к Вашим услугам функция
persistents.show()
Разберем такой скрипт
persistents.removeAll()
persistent global a=10,b=20,c=30
persistents.show()
persistents.remove #a
persistents.show()
persistents.removeAll()
persistents.show()
print a
print b
print c
Первый оператор удаляет все ранее созданные настойчивые переменные. Второй объявляет таковыми три переменных – a, b и c. Третий выводит список всех настойчивых переменных, в нем должно быть три упомянутых элемента. Четвертый оператор удаляет из списка переменную a. Знак # перед именем переменной не случаен, без него ничего не получится. Что он означает, разберем позднее, когда речь пойдет об именах переменных. Далее снова выводится список настойчивых переменных, чтобы убедиться, что a в нем отсутствует. Затем удаляем из списка настойчивых все переменные, и убеждаемся, что этот список пуст. После этого на экран выводятся все переменные, чтобы убедится, что их значения остались в целости и сохранности.
У настойчивых переменных есть одна тонкость. Рассмотрим следующий скрипт.
persistent global b,sm
b = box()
sm = standard()
Вкратце он делает следующее – создает коробочку b и стандартный материал sm. Теперь выполним его и сохраним сцену. После того, как мы перезапустили 3ds max и загрузили сохраненную сцену, то по свойствам настойчивых переменных логично было бы ожидать, что значения b и sm сохранились, но это не совсем так. Сохранилось значение только b, а sm будет иметь значение undefined. Слегка дополним скрипт
persistent global b,sm
b = box()
sm = standard()
b.material = sm
Вот теперь все будет работать правильно. Вся разница в последней строке, где материал sm применяется к коробочке b. Иными словами, если настойчивая переменная содержит объект 3ds max, но этот объект не содержится непосредственно в сцене, то значение такой переменной не сохраняется и, соответственно, не восстанавливается. В первом случае переменная sm содержала материал, который не использовался ни одним объектом сцены, ее значение и не сохранилось. Во втором случае этот материал использовался коробочкой b, и результат не замедлил проявиться.
Изменяемый тип переменных
MAXScript обладает следующей особенностью. Если в других языках каждая переменная объявляется явно или неявно, как переменная некого фиксированного типа, например, целого или текстового, то здесь каждая переменная может изменять свой тип во время выполнения программы. Например:
x = 4.5 -- сейчас x – вещественное число
x = “Hello, world” -- а сейчас – строка
Более того, элементы одного и того же массива так же могут иметь разный тип.
a[1] = 12
a[2] = 13.5
a[3] = “Character Line”