如何在MATLAB中检查变量是否为boolean
我有一个功能
function myFunc(myBoolean)
if myBoolean~=true && myBoolean~=false
assert(false,'variable should be boolean);
end
x = test(myBoolean);
如何改进?,是否有检查变量是否为真/假的函数?
答案 0 :(得分:9)
使用isa
功能。对于您的情况(来自帮助文件),您将使用:
isa(true(2,3),'logical')
ans =
1
还有专门的islogical
功能。
islogical(true(2,3))
ans =
1
答案 1 :(得分:3)
Matlab中没有“布尔”类型或类。正如@craigm所指出的那样,true
和false
所在的logical
类。然而,可能出现的问题是这样的:
test = 1;
if test == true
class(test)
end
test
是布尔值吗?我相信您知道,if
语句将评估为true
,class(test)
将返回'double'
,而非'logical'
。这是The MathWorks的一个设计选择,适用于大多数其他编程语言:任何类型的0
和1
通常用于true和false。 (uint8(1) == 1
也返回true
- 比较值,而不是类。)
所以,是的,如果您知道您的代码实际上使用逻辑值来表示布尔值(在许多情况下是一个好主意),那么islogical
就是您所需要的(更多示例请参阅here )。但是,更通用(和矢量化)的解决方案可能是:
isBoolean = @(x)islogical(x) || isnumeric(x) && all(x(:)==0 | x(:)==1)
然后以下全部返回逻辑true
:
isBoolean(true)
isBoolean(false)
isBoolean(zeros(1,3))
isBoolean(eye(3))
isBoolean(uint8(1))
答案 2 :(得分:2)
您可以使用 class
将变量类型作为字符串获取,然后将该字符串与'logical'
进行比较,以确定该变量是否为布尔值 -
strcmp(class(myBoolean),'logical')