【发布时间】:2014-03-12 17:21:56
【问题描述】:
当我运行以下代码时,我收到一条错误消息“SWITCH 表达式必须是标量或字符串常量。”
请注意,变量 FUD 是一个字符串元胞数组,并且 unique(FUD(i,1)) 返回一个字符。另请注意,这是一个运行时错误,因此 if 语句评估为 true。
if isscalar(unique(FUD(i,1))) % evaluates to true, therefore it is scalar
switch unique(FUD(i,1)) % "hurr durr durr not scalar!" <--- MATLAB
case 'JAN_RP10 .csv'
month=1;
break
case 'FEB_RP10 .csv'
month=2;
break
case 'MAR_RP10 .csv'
month=3;
break
case 'APR_RP10 .csv'
month=4;
break
case 'MAY_RP10 .csv'
month=5;
break
case 'JUN_RP10 .csv'
month=6;
break
case 'JUL_RP10 .csv'
month=7;
break
case 'AUG_RP10 .csv'
month=8;
break
case 'SEP_RP10 .csv'
month=9;
break
case 'OCT_RP10 .csv'
month=10;
break
case 'NOV_RP10 .csv'
month=11;
break
case 'DEC_RP10 .csv'
month=12;
break
otherwise
disp('switch error')
break
end
end
我不明白为什么会出现此错误。我把最初的 if 语句作为“unique(FUD(i,1))”是标量的证据。这里发生了什么?我有什么遗漏吗?
这是 FUD 的样子(10 x 3 格):
'APR_RP10 .csv' -56.5 70
'APR_RP10 .csv' -57 71
'DEC_RP10 .csv' -64 70
'DEC_RP10 .csv' -63.5 70
'DEC_RP10 .csv' -64.5 70.5
'DEC_RP10 .csv' -64 70.5
'DEC_RP10 .csv' -64 75
'FEB_RP10 .csv' -57 54
'FEB_RP10 .csv' -56.5 54.5
'FEB_RP10 .csv' -58.5 55
谢谢
【问题讨论】:
-
什么是
unique(FUD(i,1))?可以是标量函数句柄,它是标量但不允许作为 switch 表达式。 -
如果这是完整的代码清单,则不需要
break语句。 MATLAB 的switch不会失败,也不会在一个为真后评估任何其他情况,所以你只是打破了if循环。 -
unique(FUD(i,1))是一个包含字符的单元格。可能的输入是字符或数字。
标签: string matlab switch-statement character scalar