setfield изменение значения элемента списка типа mlist, tlist или list

## Синтаксис

    uL = setfield(a, v, L)

## Аргументы

L
  список типа `list`, `tlist` или `mlist`: список, в котором требуется изменить элемент.

a
  адрес элемента, который нужно изменить. Это может быть или его имя поля, указанного в виде строки, либо его индекс, указанный в виде положительного целого числа. См. подробности в вставке.

v
  любой объект Scilab: значение для присвоения.

uL
  Обновлённый список.

## Описание

`L=setfield(a,v,L)` адресует и изменяет iй элемент списка унифицированным образом среди списков типа list, tlist и mlist.

Для простых списков (list) и для типизированных списков (tlist), `L=setfield(a,v,L)` эквивалентно `L(a)=v`, то есть проще и должно быть предпочтительнее. Аналогично для любого матричноориентированного списка (mlist), если адрес `a` является именем поля.

Тем не менее, для любого матричноориентированного списка `L`, если `i` является индексом, то вставка `L(i)=v` не предопределена, для того, чтобы позволить пользователю определить перегрузку, реализующую матричноориентированную вставку, если требуется. Вот `setfield(i,v,L)` всегда определена, с тем же смыслом, что и для других списков типа list и tlist.

## Примеры

Для списка типа tlist, `setfield(3, v, T)` эквивалентно `T(3)=v` :

    T = tlist(['V','a','b'], [%z (1-%z) %z^2], [%f %t %t]);
    // Вставка предопределена:
    T(3) = [%t %t %f];
    T(3)

    T = setfield(3, [%f %t %f], T);
    T(3)

    --> T = tlist(['V','a','b'], [%z (1-%z) %z^2], [%f %t %t]);
    --> // Вставка предопределена:
    --> T(3) = [%t %t %f];
    --> T(3)
     ans  =
      T T F

    --> T = setfield(3, [%f %t %f], T);
    --> T(3)
     ans  =
      F T F

Для списка типа mlist, нет процедуры предопределённой индексированной вставки, чтобы позволить пользователю определить перегрузку матричноориентированной вставки, если потребуется.

    M = mlist(['V','a','b'], [%z (1-%z) %z^2], [%f %t %t]);
    M.b = [%t %t %t];
    M.b                 // OK, пока ...
    M(3) = [%f %t %f];  // => error

    // Но необработанная прямая вставка с setfield() всегда возможна:
    M = setfield(3, [%t %f %t], M);
    getfield(3, M)

    --> M = mlist(['V','a','b'], [%z (1-%z) %z^2], [%f %t %t]);
    --> M.b = [%t %t %t];
    --> M.b                 // OK, пока ...
     ans  =
      T T T

    --> M(3) = [%f %t %f];  // => error
    Function not defined for given argument type(s),
      check arguments or define function %b_i_V for overloading.

    --> // Но необработанная прямая вставка с setfield() всегда возможна:
    --> M = setfield(3, [%t %f %t], M);
    --> getfield(3, M)
     ans  =
      T F T

## Смотрите также

- вставка
- getfield

## История

6.0.0

- Теперь возвращается обновлённый список вместо изменения "на месте".
- setfield() больше не может использоваться для cell-массивов.