メインコンテンツ

エラーの解決: 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

参考

トピック