5
varargin을 입력으로 사용하는 함수에 래퍼를 씁니다. 래퍼에서 함수 서명을 유지하려고하지만중첩을하면 모든 변수가 함께 정리됩니다. 나는 개별 변수의 목록을 가질 수 있도록가변 변수 개별 변수에 풀기
function inner(varargin) %#ok<VANUS>
% An existing function
disp(nargin)
end
function outer(varargin)
% My wrapper
inner(varargin);
end
outer('foo', 1:3, {}) % Uh-oh, this is 1
나는, 외부 기능에 varargin
압축을 풀 수있는 방법이 필요합니다. inner
을 전달하고 변수 eval
을 호출하는 변수 이름의 문자열을 구성하여이 작업을 수행하는 것은 실제로 불쾌한 방법입니다.
function outer2(varargin) %#ok<VANUS>
% My wrapper, second attempt
inputstr = '';
for i = 1:nargin
inputstr = [inputstr 'varargin{' num2str(i) '}']; %#ok<AGROW>
if i < nargin
inputstr = [inputstr ', ']; %#ok<AGROW>
end
end
eval(['inner(' inputstr ')']);
end
outer2('foo', 1:3, {}) % 3, as it should be
누구나 덜 끔찍한 일을 생각할 수 있습니까?
감사합니다. 매우 우아합니다. –
호기심 때문에 배열을 분할하는 것과 동일한 방법이 있습니까? 더 멋진 버전의'c = arrayfun (@ (x) x, 1 : 3, 'UniformOutput', false); c {:}'. –
잘 모르겠지만 아마도 cell2mat의 변종을 사용할 수 있습니다. arrayfun과 관련된 문제는 무엇입니까? 출력을 미리 할당하면 for 루프를 사용할 수도 있습니다. 합리적인 크기의 어레이에서 성능이 큰 문제는 아니라고 생각합니다. – Loren