matlab “eval语句中的代码可能会意外地创建或分配给变量”

sczxawaw  于 8个月前  发布在  Matlab
关注(0)|答案(1)|浏览(69)

来自MATLAB docs,完整声明:
eval语句中的代码可能会意外地创建或分配给当前工作区中已有的变量,从而破坏现有数据。
什么是例子?
如果我定义function fn(); a=1并调用evalc('fn()')a会不会突然出现在fn之外的变量作用域中?示例here(试图找出-1)。

mzmfm0qo

mzmfm0qo1#

我认为文档中的问题是:

function fn()
a = 1;
eval('a = 2;');
end

在这种情况下,很明显a将被覆盖,但很容易想象更有害的情况,结果可能不那么清楚。evalin可能会让事情变得更糟。

function fn2()
a = 1;
subfn2();
disp(a)
end
function subfn2()
evalin('caller', 'a = 2;');
end

相关问题