1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Структуры

Тема в разделе "MAXScript", создана пользователем Epsilon, 13 окт 2016.

Модераторы: Savin Denis
  1. Epsilon

    Epsilon Новичок

    С нами с:
    03.06.2005
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Друзья, столкнулся со следующей проблемой. У меня есть две структуры S1 и S2. В структуре S1 есть массив, который должен содержать массив из структур S2. Структура S2 в свою очередь тоже содержит массив. Проблема в том, что создавая массив из структур S1, которые в свою очередь содержат структуры S2 при изменении значений в любой структуре S2 соответствующие значения меняются и в остальных структурах S2. Выходит так, что меняя элементы и их количество в массиве в структуре S2 я одинаково меняю их во всех структурах S2. Способ с Copy работает тоже как-то странно. В общем негодую. Кусок кода выкладываю ниже. Может кто подскажет в чем проблема?

    struct s1
    (
    a = "Name1",
    b = #()
    )

    -------------------------------------------------------------------------------------

    struct s2
    (
    c = "Name2",
    d = #(1, 2, 3, 4)
    )

    -------------------------------------------------------------------------------------

    st2 = s2 "Name s2" d: #(1, 2, 3)
    st1 = s1 a: "Name s1" b: #((copy st2), (copy st2), (copy st2))

    st3 = #()

    for i = 1 to 10 do
    (

    append st3 (copy st1)

    )

    Самое интересное, что член "a" структуры S1 можно индивидуально менять в массиве ST3 и каждый элемент этого массива будет иметь индивидуальный экземпляр этой переменной. То есть если я после выполнения вышеперечисленного алгоритма сделаю следующее:
    st3[1].a = "111"
    st3[2].a = "222"
    то всё будет корректно и st3[3].a уже будет иметь значение "Name1", которое было заданно по умолчанию, а не "111" или "222". Но вот если мы сделаем следующее:
    st3[1].b[1].d = #(5, 6, 7, 8)
    то и в st3[2].b[1].d примет то же значение, и в st[5].b[1].d и т.д. А вот st3[2].b[2].d не изменится. Но если изменить st3[2].b[2].d, то изменятся соответственно и st3[7].b[2].d, и st3[4].b[2].d и т.д. Вот такие вот зависимости странные. Почему же так происходит и как это исправить?
     
Модераторы: Savin Denis

Поделиться этой страницей