В этом разделе описывается, как скрасить индекс во временные переменные, созданные вызовами функций. temporary variable создается, когда результат вызова функции используется как промежуточная переменная в большем выражении. Результат вызова функции в выражении является временным, потому что переменная, которую он создает, существует только кратко и не сохранена в MATLAB® рабочая область после выполнения. Примером является выражение myFunction(x).prop
, который вызывает myFunction
с аргументом x
, и затем возвращает prop
свойство результата. Таким образом можно обратиться к любому типу функции (анонимной, локальной, вложенной или частной).
Рассмотрим функцию:
function y = myStruct(x) y = struct("Afield",x); end
Эта функция создает структуру с одним полем с именем Afield
, и присваивает значение полю. Можно вызвать функцию и создать структуру с полем, содержащим значение 1 с командой:
myStruct(1)
ans = struct with fields: Afield: 1
Однако, если вы хотите вернуть значение поля непосредственно, можно индексировать результат вызова функции командой:
myStruct(1).Afield
ans = 1
После выполнения этой команды временная структура, созданная командой myStruct(1)
больше не существует, и MATLAB возвращает только значение поля. Концептуально это использование аналогично созданию структуры, индексации в нее и последующему удалению:
S = struct("Afield",1); S.Afield clear S
MATLAB поддерживает индексацию точек в результаты вызова функции, как в foo(arg).prop
. Другие формы индексации в результаты вызова функции (с круглыми скобками, такими как foo(arg)(2)
или с фигурными скобками, такими как foo(arg){2}
) не поддерживаются. Успешные команды должны соответствовать критериям:
Функция вызывается с помощью круглых скобок, как в foo(arg1,arg2,...)
.
Функция возвращает переменную, для которой задано индексирование точек, такую как структура, таблица или объект.
Допустимый индекс индексации точек.
MATLAB всегда пытается применить операцию индексации точек к временной переменной, даже если функция возвращает переменную, для которой индексация точек не задана. Для примера, если вы пытаетесь индексировать в матрицу, созданную magic(3)
, тогда вы получите ошибку.
magic(3).field
Dot indexing is not supported for variables of this type.
Можно добавить больше команд индексации в конец выражения, пока временные переменные могут продолжать индексироваться. Для примера рассмотрим выражение:
table(rand(10,2)).Var1(3,:)
table(rand(10,2))
создает таблицу с одной переменной с именем Var1
. Переменная содержит матрицу 10 на 2.
table(rand(10,2)).Var1
возвращает матрицу 10 на 2, содержащуюся в Var1
.
table(rand(10,2)).Var1(3,:)
возвращает третью строку матрицы, содержащейся в Var1
.