Индексация результатов вызова функции

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

См. также

|

Похожие темы