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

从MATLAB中的匿名函数访问当前范围,matlab,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 eva

有很多关于其他语言的相关问题,但这是一个关于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
一起存储

那么,如何从
f2
访问
n

这项功能:

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

阅读中有关
evalin
命令的更多信息。

您使用的是什么MATLAB版本?至少在MatlabR2014B上,
f3()
可以工作。@hbaderts 2016b。当然,
f3()
可以工作,但是在定义
f3
之后,您不能更改
n
的值(至少,它不会对
f3
产生任何影响)。我会澄清这个问题(但请注意,我已经有了答案)。嗯,匿名函数和普通函数是一样的。没有人希望函数bla=foo()从您的工作区获得n,为什么您希望它来自匿名函数?当thingy被创建时,它会得到硬编码的值。@ZizyArxcher我不希望他们总是这样做,但我希望MATLAB提供一种类似于JavaScript、PHP等的方法。。。确实如此,请看我的答案。