【发布时间】:2021-09-05 05:56:07
【问题描述】:
这个函数本来应该是返回一个函数句柄给里面的嵌套函数,但是如果在外面的函数中把变量x设置为负值,就不起作用了。
内部嵌套函数只是一个常量函数,返回在外部函数中设置的变量 x 的值。
function t=test(x)
x=-1;
function y=f()
y=x;
endfunction
t=@f;
endfunction
如果我尝试评估返回的函数,例如test()(3),我收到一个关于 x 未定义的错误。如果 x 被定义为具有至少一个负条目的向量,或者如果 x 是函数的参数并且使用负默认值进行评估,则会发生同样的情况。但如果我改为将其定义为一些非负值
function t=test(x)
x=1;
function y=f()
y=x;
endfunction
t=@f;
endfunction,
那么返回的函数就可以正常工作了。另外,如果我删除 x 的内部定义并将 x 的值作为外部函数的参数(是否为负),例如
function t=test(x)
function y=f()
y=x;
endfunction
t=@f;
endfunction
然后评估例如test(-1)(3),该错误也不会发生。这是一个错误还是我误解了函数句柄或嵌套函数的工作原理?
Octave 文档建议使用子函数而不是嵌套函数,但它们无法访问其父函数的局部变量,我需要返回的函数依赖于返回它的函数的输入。有什么想法可以解决这个问题吗?
【问题讨论】:
标签: octave nested-function function-handle