如何将省略的参数传递给下一个函数?

时间:2018-05-21 16:44:26

标签: matlab

在matlab中我可以省略函数的参数,例如

function res = caller(a, b)
...

我可以用

来调用它
caller(12)

但是我怎么能进一步传递这个缺席的论点,例如:

function res = caller(a, b)
   callee(a, b)
   ...

如果在没有secong参数的情况下调用caller,那么如果没有第二个参数调用callee,我怎么能这样做呢?

更新

假设您有许多相互调用的函数

function res = caller01(a, b)
    ...

function res = caller02(a, b)
    ...

function res = caller03(a, b)
    ...

function res = caller04(a, b)
    ...

你想要

1)使参数b可选

2)可以将默认委托给被调用者

据我所知,Matlab在这里是不完整的,需要我将每次调用包装到callee中:

if exist('b', 'var')
   callee(a, b);
else
   callee(a);
end

这应该在每个来电者中重复。

2 个答案:

答案 0 :(得分:4)

这里有不同的选择。

选项1

function res = caller(varargin)
   callee(varargin{:})
   ...

在这里,我们捕获varargin中的所有输入参数,并将其取消选中传递给callee

选项2

function res = caller(a, b)
   if nargin == 0
      callee()
   elseif nargin == 1
      callee(a)
   else if nargin == 2
      callee(a, b)
   end
   ...

这里我们检查输入参数的数量,并用我们给出的参数调用callee

选项3

function res = caller(a, b)
   if nargin<1
      a = rand(10);
   end
   if nargin<2
      b = 'default value';
   end
   callee(a, b)
   ...

这里我们检查输入参数,并对未指定的输入参数使用默认值。

编辑:此处也可以进行混合操作。假设a是必需参数,b是可选参数。我们让MATLAB处理所需的参数(它在未提供时自动生成相应的错误消息),并将b放入varargin,我们可以用callee调用相同数量的function res = caller(a,varargin) callee(a,varargin{:}) if numel(varargin)>=1 b = varargin{1}; end ... 我们得到的输入参数,并解压缩以生成我们进一步处理所需的局部变量:

public class MyApp extends Application {

    private static AppLWP instance;

    @Override
    public void onCreate() {
         super.onCreate();
         instance = this;
    }
 }

答案 1 :(得分:0)

我通常做一个简单的'if block',据我所知,如果你想在提供的表格中保留你的caller(a,b)功能,这是不可避免的。

我经常使用灵活的东西:

function res = caller(a, b)
  if exist('b','var')
    callee(a,b)
  else
    callee(a)
  end
end

或者你可以使用varargin和'pipe'进入任何参数,直接进入callee,正如Cris已经提到的那样,并处理被调用者中的任何varargin。

function res = caller(varargin)
  callee(varargin{:})
end