私はEmbedded MATLABがあまり好きではありませんでした.まさに私が尋ねようとしているような状況のためです. MATLAB API で十分です)。
でもまあ、避けられないこともあると思います。
とにかく、ここに私の問題があります。Embedded MATLAB では、R2010a と同様に、これを行うことはできません。
for ii = <some range>
parameter = <some string>
switch parameter
case 'first_string'
% do stuff
case 'another_string_that''s_larger_than_first_string'
% do other stuff
end
% ...continue here
end
where<some string>
は反復ごとに変化します。これは、文字列の長さparameter
が可変であるためです。つまり、この の定義parameter
は Embedded Matlab の機能を超えています。
??? 非定数式または空の行列。この式は定数でなければなりません。これは、その値によって式のサイズまたはクラスが決まるためです。定数文字列に対する制限は、数値のスイッチではなく、文字列のスイッチにのみ適用されます。
switch
をより直接的な形式に変更する
switch <some string>
...
end
もちろん役に立ちません:
??? Expected a numeric value. Found a mxArray
文字列のサイズを既知の一定の長さに制限しても役に立ちません。
parameter = char_array(ii, 1:4); % <--- NOTE: length is 4 characters
switch parameter
...
end
しかし運がない:
??? 非定数式または空の行列。この式は定数でなければなりません。これは、その値によって式のサイズまたはクラスが決まるためです。定数文字列に対する制限は、数値のスイッチではなく、文字列のスイッチにのみ適用されます。
2 つの方法があります。
- 許容されるすべての文字列を何らかの数値表現にマップし、数値にスイッチを使用します
strcmp(i)
巨大な構造の中で使用しif-elseif-elseif-...-else-end
ます。
どちらも同様に醜い私見ですが、2. はおそらく醜いです (別の外部関数が必要になるでしょうstrcmp
)...
それで、これから抜け出すエレガントな方法はありますか?