从MATLAB中的匿名函数访问当前范围

时间:2017-03-14 09:53:30

标签: matlab

关于其他语言有很多相关的问题,但这是关于MATLAB的。

(如何)我可以从匿名函数访问调用者的范围?我曾考虑使用eval,但这比使用变量更糟糕。一个例子:

clearvars;
f1 = @() n
f2 = @() eval('n')
n = 1
f3 = @() n
f4 = @() eval('n')
n = 2

f3()会运行,但输出1,而我希望2。我首选的解决方案是f2(),但所有f1()f2()f4()都会失败,并显示几乎相同的错误消息:

(Error using eval)
Undefined function or variable 'n'.

有趣的是,f4()甚至无法访问原始范围,可能是因为eval隐藏了n的使用,因此n并未与f4一起存储记忆的原因。

那么我该怎么做才能从n访问f2

1 个答案:

答案 0 :(得分:2)

这有效:

clearvars;
f5 = @() evalin('caller', 'n')
n = 2
f5()

详细了解the MATLAB documentation中的evalin命令。