我在Matlab R2012b中遇到了一个令人费解的错误。看起来也是数据类型的变量名称表现出奇怪的行为。请看到这个小例子:令人费解的错误,在函数中运行脚本
function [] = test1()
dataset = 1;
if dataset ~= 0
disp hello
end
end
到test1()
调用产生输出hello
,符合市场预期。 现在,我不是在我的函数中设置值dataset
,而是运行脚本。
function [] = test2()
myscript;
if dataset ~= 0
disp hello
end
end
其中myscript.m
有句台词:
dataset=1;
现在,当我打电话test2()
我得到这个错误:
Undefined function 'ne' for input arguments of type 'dataset'.
Error in test2 (line 4)
if dataset ~= 0
(原谅变量名为dataset
- 我知道这是也是数据类型的名称,它出现在我正在运行的代码中。)因此,似乎在test2
中,Matlab创建了一个空的dataset
对象而不是使用名为dataset
的变量。此外,只有当我在脚本中而不是在函数体中设置该值时,才会出现此行为。更奇怪的是,我可以这样做:
>> dbstop in test2 at 4 % line of if statement
>> test2()
K>> dataset
dataset =
1.00
K>> dataset ~= 0
ans =
1
K>> if dataset ~= 0, disp hello; end
hello
K>> dbcont
和我得到同样的错误!错误在调试模式下不显示,但正常执行。
任何人都可以重现吗?这里发生了什么?
总之:问题在于'dataset'是一个函数,并且在没有输入参数的情况下运行它会构造一个数据集对象。如果你在你的函数中给它赋值,MATLAB会记住这一点。如果你在单独的脚本中这样做,MATLAB首先执行该功能。 – MeMyselfAndI 2014-10-16 19:30:03
为什么Matlab记住函数中的赋值而不是单独的脚本?我认为运行一个脚本就像在其中的代码复制粘贴?此外,为什么然后整数值会出现在调试模式,但不是在正常执行? – 2014-10-16 19:34:48
我不得不说,我现在没有所有的细节,但这与MATLAB中的解析顺序有关。 – MeMyselfAndI 2014-10-16 19:47:35