11.9.2 验证参数的类型

除了参数的数量之外,还可以检查输入的各种属性。validatestring 用于字符串参数,validateattributes 用于数值参数。

 
validstr = validatestring (str, strarray)
validstr = validatestring (str, strarray, funcname)
validstr = validatestring (str, strarray, funcname, varname)
validstr = validatestring (…, position)

验证 strstrarray 中的一个元素或某个元素的子串。

str 是要测试的字符串,并且 strarray 是包含有效值的字符串元胞数组时,validstr 将是 str 的验证形式,其中验证定义为 strvalidstr 的成员或子串。这对于验证和展开短选项(如 "r")为其完整形式(如 "red")非常有用。如果 strvalidstr 的子串,并且存在多个匹配项,若所有匹配项互为子串,则返回最短的匹配。否则,将引发错误,因为 str 的展开存在歧义。所有比较都不区分大小写。

额外的输入参数 funcnamevarnameposition 是可选的,它们可以使生成的验证错误消息更加具体。

示例:

validatestring ("r", {"red", "green", "blue"})
⇒  "red"

validatestring ("b", {"red", "green", "blue", "black"})
⇒  error: validatestring: multiple unique matches were found for 'b':
   blue, black

另请参阅: strcmpstrcmpivalidateattributesinputParser

 
validateattributes (A, classes, attributes)
validateattributes (A, classes, attributes, arg_idx)
validateattributes (A, classes, attributes, func_name)
validateattributes (A, classes, attributes, func_name, arg_name)
validateattributes (A, classes, attributes, func_name, arg_name, arg_idx)

检查输入参数的有效性。

确认参数 A 是有效的,即它属于 classes 中的某个类,并且满足所有 attributes。如果不满足,则抛出一个错误,并附带相应格式的消息。通过函数名 func_name、参数名 arg_name 及其在输入中的位置 arg_idx,可以使错误消息更加完整。

classes 必须是一个字符串元胞数组(允许空元胞数组),包含类的名称(请注意,类名区分大小写)。除了类名外,以下类别名称也是有效的:

"float"

浮点值,包含 "double""single" 类。

"integer"

整数值,包含 (u)int8、(u)int16、(u)int32、(u)int64 类。

"numeric"

数值,包含浮点值或整数值。

attributes 必须是一个元胞数组,包含对 A 进行检查的名称。其中一些属性需要在名称后立即提供一个附加值(详见下方各项说明)。

"<="

所有值都小于或等于 attributes 中的下一个值。

"<"

所有值都小于 attributes 中的下一个值。

">="

所有值都大于或等于 attributes 中的下一个值。

">"

所有值都大于 attributes 中的下一个值。

"2d"

二维矩阵。请注意,向量和空矩阵具有两个维度,其中一个长度为 1,或者两者长度均为 0。

"3d"

维度不超过 3。二维矩阵是第三维长度为 1 的三维矩阵。

"binary"

所有值都是 1 或 0。

"column"

值排列成单列。

"decreasing"

没有值为 NaN,且每个值都小于前一个值。

"diag"

值为对角矩阵。

"even"

所有值都是偶数。

"finite"

所有值都是有限的。

"increasing"

没有值为 NaN,且每个值都大于前一个值。

"integer"

所有值都是整数。这与使用 isinteger 不同,后者仅检查是否为整数类型。此属性检查 A 中的每个值是否为整数值,即没有小数部分。

"ncols"

列数恰好等于 attributes 中的下一个值。

"ndims"

维度数恰好等于 attributes 中的下一个值。

"nondecreasing"

没有值为 NaN,且每个值都大于或等于前一个值。

"nonempty"

非空。

"nonincreasing"

没有值为 NaN,且每个值都小于或等于前一个值。

"nonnan"

没有值为 NaN

"nonnegative"

所有值都是非负的。

"nonsparse"

不是稀疏矩阵。

"nonzero"

没有值为零。

"nrows"

行数恰好等于 attributes 中的下一个值。

"numel"

元素数恰好等于 attributes 中的下一个值。

"odd"

所有值都是奇数。

"positive"

所有值都是正数。

"real"

非复数矩阵。

"row"

值排列成单行。

"scalar"

标量。

"size"

其大小的长度等于 attributes 中的下一个值。下一个值必须是一个包含每个维度长度的数组。若要忽略对某个维度的检查,可以使用 NaN 作为该维度的值。

"square"

方阵。

"vector"

值排列成单个向量(列向量或行向量)。

另请参阅: isavalidatestringinputParser

作为 validateattributes 的替代方案,有几个更短的便捷函数可用于检查各个属性。

 
mustBeFinite (x)

要求输入 x 是有限的。

如果输入 x 的任何元素不是有限的(由 isfinite (x) 确定),则引发错误。

另请参阅: mustBeNonNanisfinite

 
mustBeGreaterThan (x, c)

要求输入 x 大于 c

如果输入 x 的任何元素不大于 c(由 x > c 确定),则引发错误。

另请参阅: mustBeGreaterThanOrEqualmustBeLessThangt

 
mustBeGreaterThanOrEqual (x, c)

要求输入 x 大于或等于 c

如果输入 x 的任何元素不大于或等于 c(由 x >= c 确定),则引发错误。

另请参阅: mustBeGreaterThanmustBeLessThanOrEqualge

 
mustBeInteger (x)

要求输入 x 是整数值(但不一定是整数类型)。

如果输入 x 的任何元素不是由各种检查确定的有限、实数、整数值,则引发错误。

另请参阅: mustBeNumeric

 
mustBeLessThan (x, c)

要求输入 x 小于 c

如果输入 x 的任何元素不小于 c(由 x < c 确定),则引发错误。

另请参阅: mustBeLessThanOrEqualmustBeGreaterThanlt

 
mustBeLessThanOrEqual (x, c)

要求输入小于或等于给定值。

如果输入 x 的任何元素不小于或等于 c(由 x <= c 确定),则引发错误。

另请参阅: mustBeLessThanmustBeGreaterThanOrEqualle

 
mustBeMember (x, valid)

要求输入 x 是指定有效值集合的成员。

如果输入 x 的任何元素不是集合 valid 的成员(由 ismember (x) 确定),则引发错误。

编程说明:当对 char 输入调用 ismember 时,由于 char 与字符串元胞之间的交互,char 输入的行为可能异常。但在正常使用时,它通常能达到预期效果。为保证操作正确,请使用 cellstr 将所有 char 数组转换为字符串元胞数组。

另请参阅: mustBeNonemptyismember

 
mustBeNegative (x)

要求输入 x 是负数。

如果输入 x 的任何元素不是负数(由 x < 0 确定),则引发错误。

另请参阅: mustBeNonnegative

 
mustBeNonempty (x)

要求输入 x 非空。

如果输入 x 为空(由 isempty (x) 确定),则引发错误。

另请参阅: mustBeMembermustBeNonzeroisempty

 
mustBeNonNan (x)

要求输入 x 不是 NaN

如果输入 x 的任何元素是 NaN(由 isnan (x) 确定),则引发错误。

另请参阅: mustBeFinitemustBeNonemptyisnan

 
mustBeNonnegative (x)

要求输入 x 是非负的。

如果输入 x 的任何元素为负(由 x >= 0 确定),则引发错误。

另请参阅: mustBeNonzeromustBePositive

 
mustBeNonpositive (x)

要求输入 x 是非正的。

如果输入 x 的任何元素为正(由 x <= 0 确定),则引发错误。

另请参阅: mustBeNegativemustBeNonzero

 
mustBeNonsparse (x)

要求输入 x 不是稀疏的。

如果输入 x 是稀疏的(由 issparse (x) 确定),则引发错误。

另请参阅: issparse

 
mustBeNonzero (x)

要求输入 x 非零。

如果输入 x 的任何元素为零(由 x == 0 确定),则引发错误。

另请参阅: mustBeNonnegativemustBePositive

 
mustBeNumeric (x)

要求输入 x 是数值。

如果输入 x 不是数值(由 isnumeric (x) 确定),则引发错误。

另请参阅: mustBeNumericOrLogicalisnumeric

 
mustBeNumericOrLogical (x)

要求输入 x 是数值或逻辑值。

如果输入 x 不是数值也不是逻辑值(由 isnumeric (x) || islogical (x) 确定),则引发错误。

另请参阅: mustBeNumericisnumericislogical

 
mustBePositive (x)

要求输入 x 是正数。

如果输入 x 的任何元素不是正数(由 x > 0 确定),则引发错误。

另请参阅: mustBeNonnegativemustBeNonzero

 
mustBeReal (x)

要求输入 x 是实数。

如果输入 x 不是实数(由 isreal (x) 确定),则引发错误。

另请参阅: mustBeFinitemustBeNonNanisreal


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

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