我的问题是,即使有一个名为' mu'的局部变量,当代码运行命令时
sqrt(mu)
Matlab尝试运行名为mu的内部函数。
据我所知,这不是正常行为。如何让Matlab在其内部函数上使用局部变量?
我计划使用部署工具编译此代码,因此修改matlab的内部函数文件是不合适的。在编译版本中会出现问题。
让我详细介绍一下这个问题,
我的 main.m 文件调用 function_a.m 函数。 Function_a函数运行另一个名为常量的脚本。 Constants.m文件不是一个函数而是一个脚本,它只保留一些变量,所以当它加载时它会用这些变量填充工作区。它的格式是,
const1=3; const2=5; mu=2;
在function_a运行constant.m之后,它尝试使用mu值。这是matlab从内部mu函数中给出错误的时候。这意味着Matlab不使用由contants.m。
创建的局部mu变量我使用调试器在运行constant.m之后但在命令中使用mu之前停止代码。穆实际上是在应有的工作空间。在调试模式下,如果我使用命令sqrt(mu),它可以正常工作。但是当我继续运行时,当在函数文件中写入相同的命令时,Matlab会给出错误,表明它正在尝试使用内部函数。
我该如何解决这个问题?
答案 0 :(得分:4)
首先,没有名为mu
的内部功能,所以我不知道那里有什么混乱。
问题很可能发生,因为您已将mu
用作函数,然后在Constants
脚本中,您将其用作变量,并且MATLAB的静态代码分析器变得混乱,因此它随着它的第一次使用作为一种功能。这与您遇到的if you called load
and tried to load a variable with the name of a function into the current workspace相同。
但总的来说,为了避免这样的问题,你应该避免使用像Constants.m
这样的脚本来填充调用函数的工作空间。这是因为如果调用函数的工作空间包含具有相同名称的函数或变量,则最终会出现这种歧义。更好的方法是使Constants
成为一个函数并让它返回一个struct
,然后可以用它来访问常量变量
function S = Constants
S.const1 = 3;
S.const2 = 5;
S.mu = 2;
end
然后从调用函数
constants = Constants();
% Use the constants
value = constants.const1 + constants.mu;
% Or assign them to "safe" variables that are specific to this calling function
my_mu = constants.mu;
通过这种方式,来自mu
的{{1}}并不总是必须被称为Constants.m
,这会导致更强大和可重复使用的代码。