结合中到标量值的隐式转换如果
和while
条件下,Octave的按元素布尔运算符通常足以执行大多数逻辑运算。然而,有时需要停止对布尔表达式进行求值,因为可以确定总体真值。Octave的短路布尔运算符是这样工作的。
boolean1&& boolean2
¶
表达式boolean1使用等效的运算计算并转换为标量全部的boolean1(:))
如果boolean1不是逻辑值,如果其值为非零,则视为true,如果其为零,则为false。如果boolean1是一个数组,只有当它不是空的并且所有元素都不是零时,它才被认为是真的。如果boolean1如果计算结果为false,则过集合表达式的结果为false。如果是真的,表达式boolean2以与相同的方式评估boolean1如果它是真的,那么整个表达式的结果就是真的。否则,过集合表达式的结果为false。
警告与evaluation等价的一个例外全部的boolean1(:))
是何时boolean1
一个空数组。对于MATLAB兼容性,空数组的真值总是错误的
所以[]&&true
计算为错误的
尽管全部的
是真的
.
boolean1|| boolean2
¶
表达式boolean1使用等效的运算计算并转换为标量全部的boolean1(:))
如果boolean1不是逻辑值,如果其值为非零,则视为true,如果其为零,则为false。如果boolean1是一个数组,只有当它不是空的并且所有元素都不是零时,它才被认为是真的。如果boolean1如果计算结果为true,则过集合表达式的结果为true。如果为false,则表达式boolean2以与相同的方式评估boolean1如果它是真的,那么整个表达式的结果就是真的。否则,过集合表达式的结果为false。
警告空矩阵的真值总是错误的
,有关详细信息,详见上一个列表项。
在确定表达式的总体真值之前,可能不会对两个操作数进行求值,这一事实可能很重要。例如,在表达式中
a ____ b
变量的值b仅当变量a为非零。
这可以用来编写更简洁的代码。例如,这可能是写
函数f(a,b,c)如果(nargin>2&&ischar(c))。。。
而不是必须使用两个如果
语句,以避免试图对不存在的参数求值。例如,如果没有短路函数,则需要写入
函数f(a,b,c)如果(nargin>2)如果(ischar(c))。。。
写
函数f(a,b,c)如果(nargin>2&ischar(c))。。。
将导致错误,如果f
使用一个或两个参数调用,因为Octave将被迫尝试计算运算符的两个操作和&’.
MATLAB具有特殊行为,允许运算符&和|在真理表达式中使用时短路如果
和while
语句。Octave的行为与兼容性相同,但是,使用&和|强烈劝阻以这种方式操作,并将报警告。相反,您应该使用&&和||总是有短路行为的运算符。
最后,Octave中不支持三元运算符(?:)。如果短路不重要,可以用如果其他
作用
M =
merge (mask, tval, fval)
¶M =
ifelse (mask, tval, fval)
¶合并的元素true_val和false_val,取决于的值面具.
如果面具是一个逻辑标量,其他两个参数可以是任意值。否则面具必须是逻辑数组,并且tval,未来值应该是匹配类的数组或元胞数组。在标量掩模的情况下,tval如果面具是真的,否则未来值返回。
在数组掩码的情况下,两者tval和未来值必须是标量或维度等于的数组面具.结果构造如下:
结果(掩码)=tval(掩码);result(!mask)=fval(!掩码);
面具也可以是任意数字类型,在这种情况下,它首先转换为逻辑类型。
编程说明:如果其他
是的别名合并
并且可以互换使用。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号