背景
我最近打开了 M-Lint 警告“M-Lint 无法决定...是变量还是函数并假设它是函数”是否可以设置 matlab 在运行之前验证可达函数 https://stackoverflow.com/questions/21553530/is-it-possible-to-set-matlab-to-validate-reachable-functions-before-running/21553765?noredirect=1#comment32551844_21553765为了尝试检测拼写错误的变量名称。
M-Lint 在最新版本的 matlab 中被重命名为代码分析,但我使用的是 Matlab 2007b。
Question
所有函数似乎都会生成此警告,即使是同一 m 文件中的函数也是如此。例如在下面的代码中needlessDelegate
使用时会生成此警告。
对于有效的函数是否可以避免此警告?或者我的函数在某种程度上写得不正确?
function [biggest]=getBiggest(variable1, variable2)
biggest=needlessDelegate(variable1, variable2); %<-- needlessDelegate generates warning. 'M-Lint cannot decide whether <name> is a variable or a function and assumes it is a function'
end
function [biggest]=needlessDelegate(variable1, variable2)
if variable1>variable2,
biggest=variable1;
else
biggest=variable2;
end
end
'M-Lint 无法确定 'needlessDelegate' 是变量还是函数,并且
假设它是一个函数'
你的函数没有写错。然而,这个 MLint 检查不会做我认为(通过阅读你的其他问题)你想要的事情。这不是一个非常有用的检查 - 这就是它默认关闭的原因。
在你的行之前考虑一下
biggest=needlessDelegate(variable1, variable2);
你本来可以有这个命令load myData.mat
,并且 .mat 文件可以包含一个变量needlessDelegate
。因此,在运行时之前,MLint 无法大致了解哪些是函数,哪些是变量。
例外情况确实只有当needlessDelegate
在调用之前定义 - 例如,如果您在该行之前添加了命令needlessDelegate = @(x,y) x+y;
。然后您会看到 MLint 消息消失了。
正如您所看到的,这通常不是一个非常有用的检查,这就是它默认关闭的原因。
也许这个例子也给出了你的其他问题的答案 - MATLAB 无法知道哪些东西可能是拼写错误或未定义的变量,因为你可以随时使用“poof”东西来存在load
,在运行时之前无法检查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)