【发布时间】:2021-12-22 01:38:49
【问题描述】:
在 Octave 中编写嵌套函数时,变量似乎没有被封装:
function r = asd()
fn1();
endfunction
function res1 = fn1()
res1 = 0;
function res2 = fn2()
res2 = 0;
for i = 10:20
res2 = res2 + i;
endfor
endfunction
for i = 1:10
printf("i before calling fn2(): %d\n", i);
res1 = res1 + fn2();
printf("i after calling fn2(): %d\n", i);
endfor
endfunction
这对我来说似乎很奇怪,因为它尖叫着寻找错误,对吧?这里没有封装变量是否有特定原因?
【问题讨论】:
-
我同意。公平地说,嵌套函数一开始有点奇怪,我一般只是不使用它们。只是让它们成为一个函数,而不是嵌套
-
除了下面 Cris 的回答之外,这里还有关于嵌套函数的 octave 文档页面:octave.org/doc/v6.4.0/Nested-Functions.html。正如 Cris 所暗示的,嵌套函数是 Matlab/Octave 创建closures 的方式。否则,在大多数其他情况下,应该首选普通的subfunctions,并将所需的变量显式传递给子函数以保持封装,正如您正确建议的那样。
标签: function variables scope octave