为什么我不能在if语句中链接逻辑比较?

时间:2012-03-20 11:06:28

标签: matlab if-statement logical-operators

如果满足其中一个条件,我正在尝试执行一段代码。同样,为清楚起见,如果任何条件为真,我希望代码执行(逻辑OR链)。

当我在Matlab中输入此代码时:

if strmatch(T,'Sd') || strmatch(T,'SuperDev') || ...
        strmatch(T,'lrnTrialVD') || strmatch(T,'lrnTrialVIS') || ...
        strmatch(T,'lrnTrialTARGET') || strmatch(T,'lrnTrialAUD')

我收到此错误:

??? Operands to the || and && operators must be convertible to logical scalar values.

有人可以告诉我哪里出错了吗?

/ BLZ

编辑:我使用了错误的功能。 strcmp是我的意思!

2 个答案:

答案 0 :(得分:3)

我相信这是因为strmatch()的返回值是一个数组,而不是标量,并且可能没有在数组参数上定义||。我面前没有MATLAB(只有Octave),但[1, 2, 3] || [4, 5, 6, 7]对你有效吗?

另外,最好匹配像(Sd|SuperDev|lrnTrial(VD|VIS|TARGET|AUD))这样的正则表达式,它更紧凑,更易读,只需要检查字符串'T'一次(不是六次)。

这看起来像是:

octave-3.2.4.exe:10> T1 = "Sd"
T1 = Sd
octave-3.2.4.exe:11> T2 = "Lollipop"
T2 = Lollipop
octave-3.2.4.exe:12> regexp(T1,"(Sd|SuperDev|lrnTrial(VD|VIS|TARGET|AUD))" )
ans =  1
octave-3.2.4.exe:13> regexp(T2,"(Sd|SuperDev|lrnTrial(VD|VIS|TARGET|AUD))" )
ans = [](1x0)

答案 1 :(得分:1)

strmatch并不一定会返回可以转换为逻辑标量值的内容。例如,它可能会返回一个匹配位置矢量,这些矢量位置不会在您不需要进一步努力的情况下进行转换。它出现在错误消息和产品文档中,它确实是!