メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

コード生成における関数ハンドルの制限事項

R2026a

コード生成用に MATLAB® コードで関数ハンドルを使用する場合は、次の制限事項に従ってください。

場合によっては、同じ変数を使用して異なる関数ハンドルを参照すると、コンパイル時のエラーが発生します。たとえば、このコードではコンパイルできません。

function y = foo(p)
x = @plus;
if p
  x = @minus;
end
y = x(1, 2);

coder.ceval に対して、関数ハンドルを入力として渡すことも、出力として受け取ることもできません。たとえば、f および str.f が関数ハンドルであるとします。

f = @sin;
str.x = pi;
str.f = f;

次のステートメントはコンパイル エラーになります。

coder.ceval('foo', @sin);
coder.ceval('foo', f);
coder.ceval('foo', str);

外部 MATLAB 関数を参照する関数ハンドルは作成できません。

feval やその他の MATLAB 外部関数に対して、関数ハンドルを渡すことも受け取ることもできません。

エントリポイント関数に対して、関数ハンドルを入力として渡すことも、出力として受け取ることもできません。たとえば、以下の関数を考えます。

function x = plotFcn(fhandle, data)

assert(isa(fhandle,'function_handle') && isa(data,'double'));

plot(data, fhandle(data));
x = fhandle(data);

この例では、関数 plotFcn が関数ハンドルとそのデータを入力として受け取っています。plotFcn は、入力 data を指定して fhandle で参照されている関数を呼び出してから、その結果をプロットしようとしています。しかし、このコードはコンパイル エラーになります。関数 isa を MATLAB 関数内で呼び出して入力のプロパティを指定するときに、'function_handle' がクラス名として認識されないことがエラーで示されます。

参考

トピック