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

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

Смотрите также

|

Похожие темы