Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Data Structures > setfield

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-массивов.
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Jul 20 11:21:28 CEST 2021