エラーの解決: string でサポートされない coder.varsize
問題
コード生成では、coder.varsize
(MATLAB Coder) 命令を使用して string 変数を可変サイズとして定義することはサポートされていません。string 変数に対して coder.varize
を呼び出すと、コード生成中に次のエラーが発生します。
string 型の変数では coder.varsize() はサポートされていません。
考えられる解決策
string を返す次の MATLAB® 関数を考えてみます。この関数のコード生成は失敗します。コード ジェネレーターでは s
を長さ 0
の固定サイズ string として定義しており、for
ループ内の string のサイズを大きくできないためです。s
は string であるため、coder.varsize
を使用して s
を可変サイズとして定義することはできません。
function out = varSizeStringError(n) s = ""; for i = 1:n s = s + ":) "; end out = s; end
string の使用を避ける
アプリケーションに string が必要でない場合は、string ではなく可変サイズの文字行ベクトルを使用できます。以下に例を示します。
function out = varSizeStringExample1(n) s = ''; coder.varsize('s'); for i = 1:n s = append(s,':) '); end out = s; end
可変サイズの文字ベクトルを string に変換する
コード生成では、coder.varsize
命令を使用した可変サイズの文字配列の定義はサポートされているため、可変長の文字行ベクトルを定義してから、そのベクトルを string に変換できます。以下に例を示します。
function out = varSizeStringExample2(n) chars = ''; coder.varsize("chars"); s = convertCharsToStrings(chars); for i = 1:n s = s + ":) "; end out = s; end
string(blanks(coder.ignoreConst(0)))
を使用して空の可変長 string を作成する
string(blanks(coder.ignoreConst(0)))
を使用すると、生成されたコードに空の可変長 string を作成するようにコード ジェネレーターに指示できます。その後、string を可変サイズとして明示的に定義せずに、この string の長さを変更できます。以下に例を示します。
function out = varSizeStringExample3(n) s = string(blanks(coder.ignoreConst(0))); for i = 1:n s = s + ":) "; end out = s; end