我想知道如何在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初学者......
答案 0 :(得分:0)
在实现功能时,您可以通过合并varargin
,varargout
和argn()
来完成类似的操作。看一下下面的例子:
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);
:x
为A1
,y
为B1
。[x,y,z] = pivota_parcial(A,B,n,k,np);
:x
将为A1
,y
将为B1
,z
将为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个输出调用此函数的功能。