Matlab --- вектор сращивания в аргументы для вызова функции

Я хочу объединить вектор в вызов функции, но я не могу найти способ сделать это. Возможно ли это?

Чтобы расширить, что я имею в виду, скажем, мы имеем вектор x длины n и функцию f, которая принимает аргументы n. Я хочу, чтобы иметь возможность вызывать f(x(1), x(2), ..., x(n)), вызывая что-то вроде f(x) или f(splice(x)). Если x был массивом ячеек вместо вектора, вызов f(x{:}) получил бы желаемый результат; только разумно предположить, что будет некоторая эквивалентность, если x - вектор.

Я надеюсь на какой-то оператор или функцию, которую мне не хватает. Я мог бы просто позвонить y = num2cell(x), а затем f(y{:}), но это не совсем то, что я ищу.

Ответы

Ответ 1

Как уже упоминалось в комментариях

tmp = num2cell(x)
f(tmp{:})

- путь.

Функция splice, так что f(splice(x)) будет делать то, что вы хотите, не делает трюк. Даже если вы можете разделить вход на несколько выходов, f принимает только первый аргумент (аналогично тому, как вы должны вызывать функцию в командной строке без запроса выходов).

Даже subsref будет работать в этом случае, так как, например, subsref(num2cell([1 2]),struct('type','{}','subs',{{':'}})) будет делать то же самое, что и splice -функция, т.е. возвращает только один вывод, если явно не запрошено несколько выходов.