На самом деле, ответ Михаила не совсем правильный.В случае, когда someFunction является функцией, которая возвращает значение, даже если ни один не запрашивается, то есть, как функция указывает, что значение должно быть присвоено ans, оболочка Михаила потерпит неудачу.Например, если someFunction были заменены на sin, и вы сравнили запущенную оболочку с запущенным sin напрямую, вы увидите:
>> wrapper(0)
>> sin(0)
ans =
0
Правильный способ сделать это -
function varargout = wrapper( varargin )
[varargout{1:nargout}] = someFunction( varargin{:} );
.Причина, по которой это работает, связана с малоизвестным крайним случаем в правилах индексации MATLAB, который существовал именно для этого случая, по крайней мере, с R2006a (возможно, дольше).Это что-то вроде бородавки в индексации MATLAB, но было сочтено необходимым справиться с подобными вещами.
Правило:
При выполнении присвоения с подпиской, если
- присваивание-присвоение неинициализированной переменной, И
- неинициализированная переменная индексируется фигурными скобками, И
- индекс в фигурных скобках пуст, И
- слева-боксовая сторона появляется внутри квадратных скобок, и
- правая часть разрешает значение / возвращает вывод
Тогда неинициализированной переменной присваивается скалярная ячейка, содержащая возвращаемое значениепо правой стороне.
Например:
>> clear uninit % just to make sure uninit is uninitialized
>> [uninit{[]}] = sin(0)
uninit =
[0]