在用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这对我来说很奇怪,因为它会发出窃听器的叫声,对吧?这里没有封装变量有什么具体的原因吗?
发布于 2021-11-09 14:20:46
嵌套函数显式存在,以便与包围函数共享变量。这就是他们的目的。如果不希望私有函数与调用函数共享变量,请在同一个M文件中调用函数之后声明它。这使得它成为一个“本地函数”,这是一个只能从这个文件中看到的函数。
通常,嵌套函数很奇怪,应该只在特定情况下使用。其中一个有用的地方是将变量封装在一个比使用匿名函数更复杂的lambda中:
% Returns a function that depends on x
function f = createLambda(x)
y = atan(x); % some calculation
function res = nested(val)
res = y * val; % …but this would be several lines or a loop or whatever
end
f = @nested
end由于在MATLAB中引入了嵌套函数,所以八进制中存在嵌套函数。您应该阅读优秀的MATLAB文档来了解它们的更多信息。
https://stackoverflow.com/questions/69896612
复制相似问题