Примечание. Если вы смогли дочитать текст до этого места, автор должен от души поздравить вас: вы обладаете завидным мужеством и у вас недюжинная пытливость ума. Правда, дальше, с точки зрения абстрактности и технологичности, материал будет еще хуже… (Или - лучше? Может, крепче?) Главное: я вас честно об этом предупредил.
Давайте посмотрим на expressions как на обычную ноду, которая имеет входы и выходы. Откройте файл expressionStart.ma.

В нем содержится три объекта и один expression, который удерживает сферу по вертикали посередине между кубами.

В Hypergraph можно увидеть связи между объектами и нодой expression!.

Как следует из диаграммы зависимостей, нода expression 1 принимает на вход значения двух атрибутов (pCubel.translateY и pCube2.translateY), вычисляет результат и помещает его на выход (output[0]), который присоединяется к вертикальной координате сферы (nurbsSpherel.
..........................................................................................................................................................................................................................
translateY).
Проделаем следующие действия. Попробуем присоединить выход от expressionl еще к какому-нибудь объекту.
Создайте полигональный тор.
Выберите его и сферу, а затем в Hypergraph выполните Graph=>lnput And Output Connections, чтобы увидеть одновременно и тор, и ноду expressionl.
Перетащите ноду expressionl на pTorusI средней кнопкой мыши, удерживая Shift.

Откроется Connection Editor.
Слева, где находится expressionl, выберите 0utput/0utput[0], а справа выделите TranslateY, присоединив, таким образом, выходное значение от expressionl к вертикальному перемещению тора.

Подергав за кубики, убедитесь, что тор двигается вместе со сферой. Теперь откройте Expression Editor, задайте в нем для удобства Select Filter=>By Expression Name и выберите expressionl , чтобы увидеть его код.
Парадоксальная вещь! Формула для expressionl не изменилась и не содержит даже упоминаний про pTorusI, однако тор беззастенчиво двигается вместе со сферой.
Конечно, если кто-то откроет этот файл в первый раз, его очень сильно озадачит поведение тора (особенно если еще обратиться к Expression Editor). Недоумение не пройдет до тех пор, пока любопытствующий не откроет Hypergraph и не прочитает эту главу. Однако мы сделали именно то, что хотели, причем вручную, устанавливая связи между объектами. Поэтому MAYA не всегда может адекватно трактовать и отображать наши, в общем-то «хакерские», действия в своем интерфейсе.
Конечно, если добавить в expressionl еще одну строку вида:
pTorusI ,translateY=(pCube1 .translateY+pCube2.translateY)/2; то MAYA совершенно законно добавит к ноде expressionl еще один выходной атрибут (output[1]) и присоединит его к тору.
Таким образом, в нашем случае (как, впрочем, и в любом другом случае), expression работает как простой вычислитель: он принимает данные на входных атрибутах (input[n], а их может быть сколько угодно), производит подсчеты и отправляет результат на выходные атрибуты (output[n], и их также может быть сколько угодно).