如果满足其中一个条件,我正在尝试执行一段代码。同样,为清楚起见,如果任何条件为真,我希望代码执行(逻辑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是我的意思!答案 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
并不一定会返回可以转换为逻辑标量值的内容。例如,它可能会返回一个匹配位置矢量,这些矢量位置不会在您不需要进一步努力的情况下进行转换。它出现在错误消息和产品文档中,它确实是!