八度中的验证属性函数出现问题



我正在尝试将一些 MATLAB 代码从 GitHub 移植到 Octave,但在解析函数输入时遇到问题。有/是可选的输入参数,处理方式如下:

% Optional parameter: maxLag
defaultMaxLag = 10 ;
checkMaxLag = @(x) validateattributes( x , { 'numeric' } , { 'positive' , 'numel' , 1 } ) ;

然后由inputParser处理:

addOptional( parser , 'maxLag' , defaultMaxLag , checkMaxLag ) ;

如果我尝试按原样运行此代码,则会出现错误

error: mdDelay: argument 'MAXLAG' is not a valid parameter

我对最后一个代码片段的八度翻译是

addParamValue( parser , 'maxLag' , defaultMaxLag , checkMaxLag ) ;

这也失败了,但有错误消息

error: if: undefined value used in conditional expression
error: called from
validate_arg at line 521 column 9
parse at line 470 column 11 

问题似乎是匿名函数checkMaxLag因为当我在终端中运行它时,我得到

error: value on right hand side of assignment is undefined

因此,validateattributes似乎没有给出inputParser所需的返回值。有什么建议吗?

您的问题与从addOptionaladdparamValue再到端口的更改无关。问题只是这失败了(最近在较新版本上的错误消息(:

octave> validate_lag = @(x) validateattributes (x, {'numeric'}, {'positive', 'numel', 1});
octave> p = inputParser ();
octave> p.addOptional ('maxLag', 10, validate_lag);
octave> p.parse (20)
error: failed validation of MAXLAG
Validation function: @(x) validateattributes (x, {'numeric'}, {'positive', 'numel', 1})

您被Octave的错误#49793捕获了。基本上,inputParser期望一个返回 true 或 false 的验证函数。但是,validateattributes要么不返回任何内容,要么失败。我建议您这样做:

function rv = validateattributes_with_return_value (varargin)
try
validateattributes (varargin{:});
rv = true;
catch
rv = false;
end_try_catch
endfunction

然后你可以使用

validate_lag = @(x) validateattributes_with_return_value (x, {'numeric'}, {'positive', 'numel', 1});

最新更新