Matlab 如何将参数传递给函数句柄,但仅在调用时对其进行解释?
我想做的是:Matlab 如何将参数传递给函数句柄,但仅在调用时对其进行解释?,matlab,anonymous-function,function-handle,Matlab,Anonymous Function,Function Handle,我想做的是: a = 5 foo = @(x) x+a a = 3 foo(1) % recieve 4 相反,我只得到6分!在我运行的其他几个测试中,我发现a在foo为时进行评估,而不是在调用foo时进行评估 由于种种原因,我不能和你一起工作 foo = @(x,a) x+a 当您在Matlab中创建匿名函数时,它会存储它所需且不属于其输入的任何变量的当前值 因此,当您创建如下foo时: a = 5 foo = @(x) x+a 它存储了与此等效的内容: foo = @(x) x+5
a = 5
foo = @(x) x+a
a = 3
foo(1) % recieve 4
相反,我只得到6分!在我运行的其他几个测试中,我发现a
在foo
为时进行评估,而不是在调用foo
时进行评估
由于种种原因,我不能和你一起工作
foo = @(x,a) x+a
当您在Matlab中创建匿名函数时,它会存储它所需且不属于其输入的任何变量的当前值 因此,当您创建如下
foo
时:
a = 5
foo = @(x) x+a
它存储了与此等效的内容:
foo = @(x) x+5
即使以后更改a
的值,存储在foo
中的常量值也不会更改
另一方面,如果您想更改a
的值,则必须接受a
作为函数的参数
来源:您可以使用
函数
命令检查存储数据的值:
>> a = 5
foo = @(x) x+a
a =
5
foo =
@(x)x+a
>> handleInfo = functions(foo)
handleInfo =
function: '@(x)x+a'
type: 'anonymous'
file: ''
workspace: {[1x1 struct]}
>> handleInfo.workspace{1}
ans =
a: 5
不推荐您要求执行的操作。这将很难调试 也就是说,可以使用
evalin
功能来获取a
的当前值
a=5;
foo = @(x)evalin('caller','a')+x;
foo(1) %Returns 6
a=3;
foo(1) %Returns 5
更好(更好!)的方法是将a
的定义推入适当的数据结构或对象中,并创建一个函数getCurrentValueOfA()
。然后您可以将foo
定义为
foo = @(x) getCurrentValueOfA() + x;
抱歉,需要澄清一下:您是说您希望值为4,但得到6?或者你期望它是6,你得到4。我得到6,但期望4.getCurrentValueOfA显然是一个更好的可调试选项,只是它有可读性的缺点。无论如何,两者都能解决问题。谢谢“('caller')”参数表示我们正在计算调用时间?否。“caller”参数表示计算调用函数命名空间中的表达式。另一个选项是“base”,它告诉它使用顶级名称空间。