可以在Scilab中重载函数吗?

时间:2017-11-16 17:23:49

标签: scilab

我想知道如何在scilab中重载函数。它似乎并不像在C ++中那么简单。例如,

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初学者......

1 个答案:

答案 0 :(得分: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);xA1yB1
  • [x,y,z] = pivota_parcial(A,B,n,k,np);x将为A1y将为B1z将为np1

如果您特别需要更改输出的顺序,则需要对输入执行相同的操作:检查输出的数量,并使用它来为每种情况定义varargout。基本上,您必须通过以下内容更改最后一行:

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

请注意,即使这样做,也可以保留使用0和最多2或3个输出调用此函数的功能。