检查变量是否为布尔值

时间:2014-10-29 16:22:52

标签: matlab

如何在MATLAB中检查变量是否为boolean

我有一个功能

function myFunc(myBoolean)
  if myBoolean~=true && myBoolean~=false
  assert(false,'variable should be boolean);
end
x = test(myBoolean);

如何改进?,是否有检查变量是否为真/假的函数?

3 个答案:

答案 0 :(得分:9)

使用isa功能。对于您的情况(来自帮助文件),您将使用:

isa(true(2,3),'logical')
ans = 
      1

还有专门的islogical功能。

islogical(true(2,3))
ans = 
      1

答案 1 :(得分:3)

Matlab中没有“布尔”类型或类。正如@craigm所指出的那样,truefalse所在的logical类。然而,可能出现的问题是这样的:

test = 1;
if test == true
    class(test)
end

test是布尔值吗?我相信您知道,if语句将评估为trueclass(test)将返回'double',而非'logical'。这是The MathWorks的一个设计选择,适用于大多数其他编程语言:任何类型的01通常用于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')
相关问题