主要内容

解决错误:试图将变量添加到静态工作区。

问题

嵌套函数和匿名函数的工作空间是静态的。这意味着函数中使用的所有变量都必须出现在代码文本中。

如果您试图动态地将变量添加到匿名函数、嵌套函数或包含嵌套函数的函数的静态工作空间,则MATLAB®发出表单错误

尝试添加变量到静态工作空间。

有关基本工作区和函数工作区之间差异的详细信息,请参见基本和函数工作区.有关嵌套函数的详细信息,请参见嵌套函数

可能的解决方案金宝搏官方网站

提前声明变量

避免向静态工作区动态添加变量的一种方法是在动态地为该变量赋值之前在代码中显式地声明该变量。这样做将导致变量名对MATLAB可见,因此该名称将包含在组成静态工作空间的固定变量集中。

例如,假设有一个名为makeX.m动态地将值赋给变量X.一个调用makeX而且显式地声明X避免动态添加错误,因为X在函数工作区中。

声明变量的常用方法是将其值初始化为一个空数组:

函数noerror nestedfx函数nestedfx X = [];makeX结束结束

使用evalevalin,或assignin在嵌套函数中分配新变量

使用evalevalin,或assignin在嵌套函数中赋值新变量会产生错误。

这将会错误,因为x没有在eval("x=2")之外声明;结束结束

如果可能的话,完全避免使用这些函数。看到eval函数的替代品.如果无法避免,则在父函数中显式声明变量:

函数noaticworkspaceerrors x = [];函数这不会出错,因为'x'是在eval之外声明的eval (“x = 2”);结束结束

使用一个MATLAB脚本在嵌套函数中分配新变量

调用在嵌套函数中创建变量的MATLAB脚本将生成错误。在下面的例子中,脚本,scriptThatIntroducesZ,包含将值赋给变量的代码z.因为代码没有显式地声明z则会抛出一个错误。

这将会错误,因为'z'没有在脚本之外声明

为了避免错误,请在调用为变量赋值的脚本之前在函数中声明变量。

函数noStaticWorkspaceErrors函数这不会出错,因为'z'是在脚本之外声明的Z = [];scriptThatIntroducesZ结束结束

或者,将脚本转换为函数并使z它的输出参数。这种方法还使代码更加清晰。

使用显式变量名负载函数

使用负载在嵌套函数中赋值变量,而不显式指定变量名将生成错误。在下面的例子中,负载用于加载包含变量的mat文件Y.因为代码没有显式地声明Y则会抛出一个错误。

这将错误,因为var Y没有显式指定加载MatFileWithVarY结束

方法的输入指定变量名以避免错误负载函数。

函数noStaticWorkspaceErrors函数这将不会出错,因为变量'x'和'y'是指定的负载MatFileWithVarXxY =负载(“MatFileWithVarY”“y”);结束结束

属性中的输出负载函数转换为结构数组。

类中赋值变量MATLAB嵌套函数中的调试器

在调试时,如果在嵌套函数中停止,则不能使用调试命令提示符添加变量。将变量分配到基本工作空间中,它不是静态的。

K > > assignin(“基地”、“X”,括号

在匿名函数中分配变量

匿名函数不能包含变量赋值。当匿名函数被调用时,将抛出一个错误。

@()eval("x=2")

重写函数时,不需要对变量赋值。

xEquals2 = @()2;x = xEquals2()
X = 2

相关的话题