11.7 忽略参数

在形式参数列表中,可以使用伪占位符 ~ 来代替名称。这表示应忽略相应的参数值,而不将其存储到任何变量中。

function val = pick2nd (~, arg2)
  val = arg2;
endfunction

nargin 的值不受此声明的影响。

返回参数也可以使用相同的语法来忽略。例如,sort 函数既返回排序后的值,也返回原始输入的一个索引向量,使用该索引向量可以得到排序后的输出。忽略第二个输出很简单——不请求多于一个输出即可。但如果要忽略第一个输出而只计算第二个输出,则需要使用 ~ 占位符。

x = [2, 3, 1];
[s, i] = sort (x)
⇒
s =

   1   2   3

i =

   3   1   2

[~, i] = sort (x)
⇒
i =

   3   1   2

使用 ~ 占位符时,必须使用逗号(而非空格)来分隔输出参数。否则,解释器会将 ~ 视为逻辑非运算符。

[~ i] = sort (x)
parse error:

  invalid left hand side of assignment

函数可以利用被忽略的输出来减少执行的计算次数。为此,请使用 isargout 函数来查询是否需要输出参数。例如:

function [out1, out2] = long_function (x, y, z)
  if (isargout (1))
    ## Long calculation
    ...
    out1 = result;
  endif
  ...
endfunction
 
tf = isargout (k)

在函数内部,返回一个逻辑值,指示参数 k 是否会在输出时被赋值给某个变量。

如果结果为 false,则表明在函数调用期间通过使用波浪号(~)特殊输出参数忽略了该参数。函数可以使用 isargout 来避免对不需要的输出执行不必要的计算。

如果 k 超出范围 1:max (nargout),函数返回 false。k 也可以是一个数组,在这种情况下,函数会逐元素处理并返回一个逻辑数组。在顶层调用时,isargout 会返回一个错误。

另请参阅: nargoutvarargoutnthargout


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4