Проблема заключается в определении анонимной функции. Заключив вашу функцию foobar(baz)
между символами {...}
, вы программируете функцию которая должна:
- вычислить выражение
foobar(baz)
- Поместите результат этого выражения в возвращение
cell
- Клетка
Очевидно, что на этапе (2) Matlab не может поместить результат выражения (1) в ячейку, потому что из (1) нет выхода.
Так просто определить свою функцию без фигурных скобок:
myFunction = @() fooBar(baz)
и все должно работать нормально.
Чтобы продемонстрировать на примере, давайте определим функцию fooBar
, делая то, что не производит выход (изменить пределы топор, например):
fooBar = @(axlim) set(gca,'XLim',axlim)
теперь я могу назвать fooBar([0 20])
и текущие оси будут иметь ограничения по осям, установленным на [0 20]
Если есть диапазон осей, который я часто использую ([-5 5]), у меня может возникнуть соблазн определить новую функцию, которая всегда будет вызывать fooBar
с теми же самыми (часто используются) параметры:
fooBarPrefered = @() fooBar([-5 5])
Теперь каждый раз, когда я называю fooBarPrefered()
, мои пределы оси X непосредственно установлен на [-5 5].
Для дальнейшего доказать точку, так как вызов fooBar([-5 5])
не производит выход, Matlab будет действительно жаловаться, если я определяю свою функцию с фигурными скобками:
fooBarPrefered = @() {fooBar([-5 5])} ;
>> fooBarPrefered()
One or more output arguments not assigned during call to "set".
Error in @(axlim)set(gca,'XLim',axlim)
Error in @(){fooBar([-5,5])}
Но обратите внимание, что это та же ошибка чем если бы вы пытались присвоить выход fooBar
переменной непосредственно в рабочем пространстве:
a = fooBar([0 20])
One or more output arguments not assigned during call to "set".
Error in @(axlim)set(gca,'XLim',axlim)
Нижняя строка: если функция не имеет выхода, не пытайтесь перенаправить этот вывод на переменную или выражение.
очень хороший ответ +1! –
О! Я думал, что эти фигурные скобки были частью синтаксиса анонимных функций.Он действительно работает без них. Благодаря! – kralyk