Ограничения на обработку функций для создания кода
При использовании дескрипторов функций в коде MATLAB ®, предназначенном для создания кода, соблюдайте следующие ограничения:
Не используйте одну и ту же привязанную переменную для ссылки на другие дескрипторы функций
В некоторых случаях использование одной и той же связанной переменной для ссылки на различные дескрипторы функций вызывает ошибку времени компиляции. Например, этот код не компилируется:
function y = foo(p)
x = @plus;
if p
x = @minus;
end
y = x(1, 2);
Не передавать дескрипторы функций в или из coder.ceval
Нельзя передавать дескрипторы функций в качестве входов или выходов из 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 пытается вызвать функцию, на которую ссылается fhandle со входом data и постройте график результатов. Однако этот код создает ошибку компиляции. Ошибка указывает на то, что функция isa не распознает 'function_handle' в качестве имени класса при вызове внутри функции MATLAB для задания свойств входных данных.
Связанные темы