如何让 MATLAB 忽略一个函数?
How can I make MATLAB to ignore a function?
我的问题是,即使有一个名为 'mu' 的局部变量,当代码 运行 执行命令
时
sqrt(mu)
Matlab 尝试 运行 名为 mu 的内部函数。
据我所知,这不是正常行为。如何让 Matlab 在其内部函数上使用局部变量?
我打算用deploy工具编译这段代码,所以修改matlab的内部函数文件不合适。编译版本会出现问题
让我更详细地说明这个问题,
我的 main.m 文件调用 function_a.m 函数。 Function_a 函数 运行s 另一个名为 constants 的脚本。 Constants.m 文件不是一个函数而是一个脚本,它只保留一些变量,所以当它加载时它会用这些变量填充 workspace。它的格式是,
const1=3; const2=5; mu=2;
紧接着 function_a 运行s constant.m,它尝试使用 mu 值。这是当 matlab 从其内部 mu 函数中给出错误时。这意味着 Matlab 不使用由 contants.m.
创建的局部 mu 变量
我使用调试器在 运行ning constant.m 之后但在命令中使用 mu 之前停止了代码。 Mu其实是在工作space,这是应该的。在调试模式下,如果我使用命令 sqrt(mu),它会正常工作。但是当我让继续 运行 时,当在函数文件中写入相同的命令时,Matlab 会给出错误,表明它正在尝试使用内部函数。
我该如何解决这个问题?
首先,没有名为mu
的内部函数,所以我不知道那里有什么混乱。
问题很可能发生,因为您将 mu
用作函数,然后在 Constants
脚本中将其用作变量,MATLAB 的静态代码分析器变得混乱,因此它与这是第一次作为函数使用。这与您遇到的问题相同 .
但一般来说,为避免此类问题,您应该避免使用 Constants.m
之类的脚本来填充调用函数的工作区。这是因为如果调用函数的工作区包含具有相同名称的函数或变量,您最终会遇到这种歧义。更好的方法是使 Constants
成为一个函数,并将其 return 设为 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;
通过这种方式,Constants.m
中的 mu
不必总是被调用 mu
,这会导致更健壮和可重用的代码。
我的问题是,即使有一个名为 'mu' 的局部变量,当代码 运行 执行命令
时sqrt(mu)
Matlab 尝试 运行 名为 mu 的内部函数。
据我所知,这不是正常行为。如何让 Matlab 在其内部函数上使用局部变量?
我打算用deploy工具编译这段代码,所以修改matlab的内部函数文件不合适。编译版本会出现问题
让我更详细地说明这个问题,
我的 main.m 文件调用 function_a.m 函数。 Function_a 函数 运行s 另一个名为 constants 的脚本。 Constants.m 文件不是一个函数而是一个脚本,它只保留一些变量,所以当它加载时它会用这些变量填充 workspace。它的格式是,
const1=3; const2=5; mu=2;
紧接着 function_a 运行s constant.m,它尝试使用 mu 值。这是当 matlab 从其内部 mu 函数中给出错误时。这意味着 Matlab 不使用由 contants.m.
创建的局部 mu 变量我使用调试器在 运行ning constant.m 之后但在命令中使用 mu 之前停止了代码。 Mu其实是在工作space,这是应该的。在调试模式下,如果我使用命令 sqrt(mu),它会正常工作。但是当我让继续 运行 时,当在函数文件中写入相同的命令时,Matlab 会给出错误,表明它正在尝试使用内部函数。
我该如何解决这个问题?
首先,没有名为mu
的内部函数,所以我不知道那里有什么混乱。
问题很可能发生,因为您将 mu
用作函数,然后在 Constants
脚本中将其用作变量,MATLAB 的静态代码分析器变得混乱,因此它与这是第一次作为函数使用。这与您遇到的问题相同
但一般来说,为避免此类问题,您应该避免使用 Constants.m
之类的脚本来填充调用函数的工作区。这是因为如果调用函数的工作区包含具有相同名称的函数或变量,您最终会遇到这种歧义。更好的方法是使 Constants
成为一个函数,并将其 return 设为 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;
通过这种方式,Constants.m
中的 mu
不必总是被调用 mu
,这会导致更健壮和可重用的代码。