R2015和R2016之间的本地功能可见性如何变化?

时间:2016-05-03 16:03:01

标签: matlab visibility scoping

我遇到了一个奇怪的问题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。

0 个答案:

没有答案