exponenta event banner

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

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

См. также

|

Связанные темы