В этом разделе описывается, как скрасить индекс во временные переменные, созданные вызовами функций. 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.