我从不喜欢嵌入式MATLAB,正是因为我要问的问题:)根据我的经验,转换到嵌入式MATLAB通常需要花费更多的精力而不是简单地用C语言重写(当你知道C和很好的MATLAB API).
但是哦,我猜有些事情是无法避免的.
无论如何,这是我的问题.在嵌入式MATLAB中,就像在R2010a中一样,你不能这样做:
for ii =
parameter =
switch parameter
case 'first_string'
% do stuff
case 'another_string_that''s_larger_than_first_string'
% do other stuff
end
% ...continue here
end
其中< some string>每次迭代都会改变.这是因为字符串参数的长度是可变的,这意味着参数的这个定义超出了嵌入式Matlab的功能:
??? Non-constant expression or empty matrix. This expression must be
constant because its value determines the size or class of some
expression. The limitation to constant strings applies only for
switches on strings, not switches on numbers.
将开关更改为更直接的形式
switch
...
end
当然没有帮助:
??? Expected a numeric value. Found a mxArray
即使将字符串的大小限制为已知的常量长度也无济于事:
parameter = char_array(ii, 1:4); %
switch parameter
...
end
但没有运气:
??? Non-constant expression or empty matrix. This expression must be
constant because its value determines the size or class of some
expression. The limitation to constant strings applies only for
switches on strings, not switches on numbers.
我看到两种出路:
>将所有允许的字符串映射到某个数字表示,并使用数字上的开关
>在巨大的if-elseif-elseif -…- else-end构造中使用strcmp(i).
两者都是同样丑陋的恕我直言,2.也许是丑陋的(你需要另一个外在功能,strcmp)…
那么,有没有优雅的方法呢?