Как видно из заголовка, как массив ячеек, который является выходом функции matlab, может быть непосредственно преобразован в список через запятую без использования временного массива?
Т.е. я знаю, что вы можете написать
% functioning code
tmp = cell(1,3); % function that makes a temporary cell_array;
b = ndgrid(tmp{:}); % transform tmp into a
% comma-separated list and pass into another function
Я ищу способ, позволяющий мне сделать это таким образом, как
% non functioning code
b = ndgrid( cell(1,3){:} );
, чтобы его можно было использовать в анонимной функции, где временные аргументы не допускаются,Пример:
fun = @(x)accept_list( make_a_cell(x){:} );
Как этого достичь?Я думаю, что должна быть функция, вызываемая при использовании оператора '{:}', но какой это будет?
РЕДАКТИРОВАТЬ для пояснения:
Решение в ответе, котороеэтот вопрос был помечен как возможный дубликат, не решает проблему, потому что subsref не является заменой {:} при создании списка через запятую.
Пример:
a = {1:2,3:4}
[A1,A2] = ndgrid(subsref(a, struct('type', '{}', 'subs', {{':'}})));
(ошибочно)
A1 =
1 1
2 2
A2 =
1 2
1 2
, но
a = {1:2,3:4}
[A1,A2] = ndgrid(a{:});
возвращает (правильно)
A1 =
1 1
2 2
A2 =
3 4
3 4