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
-функция, т.е. возвращает только один вывод, если явно не запрошено несколько выходов.