2017-01-17 5 views
2

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,@into3xには2が必要です。しかし、varargin@into2であり、xは@into3である。私は順序を変更しようとしましたが、渡された2つの関数は1つの引数には入りません。各引数には1つの関数しかありません。 vararginにはセルが必要ですが、動作していないようです。私はOctave 4.2を使用しています。 (2が類似していなければならないため、タグの中にMATLABを置く。)

答えて

3

問題はvarargin機能へ最後入力引数として現れなければならないということです。最後でなければ、入力パラメータvarargin)の代わりに扱われます。 documentationから:

特殊パラメータ名vararginは、それはあなたの、機能が有効でだから、入力引数

の可変数を取ることを示している関数の引数リストの最後にを表示された場合あなたの代わりにしたいと思うだろう何

function result = calc(y, x) 

、場所0:calc機能は、機能的に違いはありませんが入力引数のリストの最後にあり、calcの範囲内でロジックを変更してください。サイドノートとして

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

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

正確にあなたが実際に入力の可変数を持っていないので、このシナリオでvararginを使用する必要がある理由、それははっきりしていません。

関連する問題