【发布时间】:2015-01-22 05:29:24
【问题描述】:
我需要类似于evalin的东西,但是不能递归使用Matlab的原始evalin。例如,我有函数 f0 调用 2 个其他函数 f11 和 f12:
function f0()
[v1, v2] = deal(1, 1);
f11();
f12();
disp(v1);
end
函数f11和f12使用变量v1,都调用函数f2:
function f11()
v1 = evalin('caller', 'v1');
f2();
assignin('caller', 'v1', v1);
end
function f12()
v1 = evalin('caller', 'v1');
f2();
assignin('caller', 'v1', v1);
end
并且函数 f2 应该使用 f0 工作区的变量 v1 和 v2:
function f2()
v1 = evalin('caller', 'v1'); % get variable v1 from f11 or f12
% since there is already a variable v1
% in f11 and f12's workspaces
% TODO: get v2 from f0
if v2 == 1
v1 = v1 + 1;
end
assignin('caller', 'v1', v1);
end
有没有在 f11 和 f12 中不使用v2 = evalin('caller', 'v2') 的情况下使 TODO 成为可能?
【问题讨论】:
-
a) 为什么不使用函数参数? b) 或者你可以使用全局变量吗? c) 你为什么还要这样做?看起来不是个好主意!
-
因为实际上我的 f0 有 ~ 100 个变量,就像一个 C 头文件,f11 和 f12 使用大约 10 个变量,f2 使用大约 10 个变量,并且有两个以上的函数 (f11, . ., f19) 调用 f2 :((
-
如果从命令行调用
f0(),即它是基本工作区,那么您可以在f2()中执行v2=evalin('base','v2') -
@articuno:这是不正确的。然后变量仍在 f0 的工作区中,而不是在基础工作区中。
-
@scmg:是的,你是对的。我误解了。
标签: matlab recursion workspace