2017-01-17 4 views
2

옥타브에서 varargin을 사용하려하지만 약간의 문제가있는 것으로 보입니다.옥타브에서 varargin을 사용하십시오.

into2.m

function [result] = into2(x) 
    result = x*2; 
endfunction 

into3.m

function [result] = into3(x) 
    result = x*3; 
endfunction 

calc.m

function [result1] = calc(varargin, x) 
    fn1 = varargin{1}; 
    fn2 = varargin{2}; 
    result1 = fn1(x) + fn2(x); 
endfunction 
: 여기 내 코드입니다

test1.m (주 기능)

function [] = test1() 
    result= calc(@into2,@into3,2); 
    disp(result); 
endfunction 

test1() 메인 calc() 함수를 호출하는 두 개의 기능 핸들 스칼라 전달된다. varargin에는 @into2,@into3이 있고 x에는 2이 있어야합니다. 그러나 varargin@into2이고 x는 @into3입니다. 명령을 변경하려고 시도했지만 전달 된 두 함수가 하나의 인수로 들어 가지 않습니다. 각 인수에는 하나의 함수 만 있습니다. varargin에는 셀이 있어야하지만 작동하지 않는 것 같습니다. 나는 옥타브 4.2를 사용하고있다. (태그에 MATLAB 퍼팅 둘은 유사해야하기 때문이다.)

답변

3

문제는 반드시 varargin 함수에 마지막 입력 인자로 나타나는 것이다. 마지막 것이 아닌 경우 입력 매개 변수 (varargin) 대신 처리됩니다. documentation에서 :

특수 매개 변수 이름 varargin은 함수가 입력 인수 효과 그래서

의 가변 수를 취 나타냅니다 함수 매개 변수 목록의 말에 나타나는 경우 대신 수행 할 수있는 것들

function result = calc(y, x) 

, 장소 0 : calc 기능은 기능적으로 다르지 않다이 입력 인수 목록에서 마지막으로 calc 내의 논리를 수정하십시오. 정확하게 당신이 당신이 실제로 입력 변수 번호를 가지고 있지 않기 때문에이 시나리오에서 varargin를 사용해야하는 이유를 보조 노트로

function result = calc(x, varargin) 
    fn1 = varargin{1}; 
    fn2 = varargin{2}; 

    result = fn1(x) + fn2(x); 
end 

, 그것은 분명하지 않다.