Поддерживают ли анонимные функции необязательные параметры? - PullRequest
1 голос
/ 13 февраля 2020

Есть ли способ использовать необязательные параметры в анонимных функциях, реализованных в MATLAB?

См. Следующий пример:

foo = @(x,y)(x+y+12)

Может ли y быть необязательным параметром в вышеуказанной анонимной функции, например,

foo = @(x,y?)(x+y+12)

и использовать только y когда предоставляется?

1 Ответ

5 голосов
/ 13 февраля 2020

В MATLAB есть концепция, называемая "список входных аргументов переменной длины", см. varargin. Это может быть использовано в анонимных функциях в целом и, в частности, в вашем примере:

foo = @(varargin) sum(cell2mat(varargin)) + 12;

foo(10)           % 10 + 12
foo(10, 20)       % 10 + 20 + 12
foo(10, 20, 30)   % 10 + 20 + 30 + 12
ans =  22
ans =  42
ans =  72

varargin - это массив ячеек, поэтому нам нужно преобразовать его в обычный (цифра c) массив. Тогда нам просто нужно сложить эти значения и добавить 12.

Конечно, это решение работает, только если все переданные аргументы имеют некоторый тип чисел c.

Надеюсь, это поможет!

...