2017-11-16 16 views
0

私はscilabで関数をオーバーロードする方法を知りたいと思います。 C++のように単純ではないようです。例えば、Scilabで関数のオーバーロードが可能ですか?

function [A1,B1,np1]=pivota_parcial(A,B,n,k,np) 
.......//this is just an example// the code doesn't really matter 
endfunction 


//has less input/output variables//operates differently 



function [A1,np1]=pivota_parcial(A,n,k,np) 
.......//this is just an example// the code doesn't really matter 
endfunction 

のScilabで感謝

初心者....

答えて

0

あなたは、あなたの機能を実装する際にvararginvarargoutargn()を組み合わせることにより、そのような何かを達成することができます。次の例を見てみましょう:

function varargout = pivota_parcial(varargin) 
    [lhs,rhs] = argn(); 
    //first check number of inputs or outputs 
    //lhs: left-hand side (number of outputs) 
    //rhs: right-hand side (number of inputs) 

    if rhs == 4 then 
     A = varargin(1); B = 0; 
     n = varargin(2); k = varargin(3); 
     np = varargin(4); 
    elseif rhs == 5 then 
     A = varargin(1); B = varargin(2); 
     n = varargin(3); k = varargin(4); 
     np = varargin(5); 
    else 
     error("Input error message"); 
    end 

    //computation goes on and it may depend on (rhs) and (lhs) 
    //for the sake of running this code, let's just do: 
    A1 = A; 
    B1 = B; 
    np1 = n; 

    //output 
    varargout = list(A1,B1,np1); 
endfunction 

まず、あなたが関数に渡される引数の数をチェックするためにargn()を使用しています。その後、必要な方法で名前を変更し、A = varargin(1)などの名前を付けます。入力が4つの場合の入力ではないBが定数に設定されていることに注意してください。実際には、とにかくそれに価値が必要なのかもしれません。

すべてのことが終わったら、出力を設定する必要があります。ここではvarargoutを使用するだけでは不十分な場合があります。最後の行をそのまま使用した場合は、varargout = list(A1,B1,np1)、実際には0と最大3つの出力を持つ関数を呼び出すことができますが、次のようにlist()に表示される順序と同じ順序で提供されます。

  • pivota_parcial(A,B,n,k,np);:が実行され、最初の出力A1が配信されますが、変数には格納されません。
  • [x] = pivota_parcial(A,B,n,k,np);xは、A1となります。
  • [x,y] = pivota_parcial(A,B,n,k,np);xA1となり、yB1となります。
  • [x,y,z] = pivota_parcial(A,B,n,k,np);xA1なり、yznp1なり、B1になります。あなたは、特に出力の順序を変更する必要がある場合

、あなたはあなたの入力していた同じことを行う必要があります:出力数をチェックし、各ケースのvarargoutを定義するためにそれを使用します。でもこれを行うことにより、0、最大2つのまたは3の出力にして、この関数を呼び出す機能が保持されていることを

if lhs == 2 then 
     varargout = list(A1,np1); 
    elseif lhs == 3 then 
     varargout = list(A1,B1,np1); 
    else 
     error("Output error message"); 
    end 

注:基本的には、次のようなもので、最後の行を変更する必要があります。

+0

私はあなたのコメントをアップしましたが、私はここで初心者ですから違いはありません。申し訳ありません... ありがとうございます! (Muito Obrigado amigo !!) – Lucfer1501

+0

De nada。私の答えはあなたに問題を解決しますか?それが解決すれば、あなたはアップボーティングの代わりにそれを受け入れることができます。投票矢印の下にある「V」をクリックします。それがあなたを助けないなら、それを明確にすることはできますか?どの部分があなたのためには機能しないのか、本当に必要なのは何かを教えてください。 – luispauloml

関連する問題