我遇到了一个奇怪的问题w / MATLAB代码在R2012和R2015中运行良好,但在R2016中没有运行。
这是相关(我认为)的片段。变量commmandstring
中的命令字符串是指公司私有工具集中的子函数,具有自己定义的类。也就是说,有许多函数使用语法cfunc.func1(...) , cfunc.func2(...)
调用,依此类推。
函数体已经确定cfunc
是此类的父函数。我可以直接从命令行调用cfunc.getdatabycycle(cycle,cycle,288,17,17)
,它运行正常。但是在具有以下片段的函数中,
>> commandstring commandstring = getdatabycycle(cycle,cycle,10,5,3)
% char string
>> ghandle = @(cycle,enc) eval(sprintf('cfunc.%s',commandstring));
>> [stat,data] = feval(ghandle, cycle,enc);
在MATLAB 2016中,呼叫' feval'失败并显示错误消息:
K>> [stat,data] = feval(ghandle, cycle,enc);
Undefined variable "cfunc" or class "cfunc.getdatabycycle".
Error in
myfunc >@(cycle,enc)eval(sprintf('cfunc.%s',commandstring))
(line 90)
ghandle = @(cycle,enc) eval(sprintf('cfunc.%s',commandstring));
我想知道这是否与Mathworks的某些版本更改注释有关,它讨论了对本地函数范围和可见性的某种更改。有什么想法吗?
我问我的本地" beta测试者"尝试使用以下几行,因为它们在R2015中工作正常
gstr = sprintf('cfunc.%s',commandstring);
[stat,data] = eval(gstr) % 'cycle' is a local variable
将函数句柄存储到变量中的本地函数并使用 而不是调用本地函数。例如,分配 fcn = @myLocalFcn并更新脚本以使用变量fcn 而不是直接调用myLocalFcn。