# code
SS=200
println("函数前的SS=== $SS")
for i in 1:5
println("这是第 $i 次循环")
AA1=200
function add( AA,B)
SS=AA+B
return SS
end
SS=add(AA1,20)
#println("这时候的SS=== $SS")
dd=add(20,30)
#println("cc==== $cc")
println("函数后的SS $SS")
println("dd==== $dd")
end
## Case 1
function outer(a)
function inner()
a = 100 # 等价于global a = 100
end
println("调用inner函数前a=$a") # 输出: 调用inner函数前a=10
inner()
println("调用inner函数后a=$a") # 输出: 调用inner函数后a=100
end
outer(10)
## Case 2
function outer(a)
function inner()
local a = 100
end
println("调用inner函数前a=$a") # 输出: 调用inner函数前a=10
inner()
println("调用inner函数后a=$a") # 输出: 调用inner函数后a=10
end
outer(10)
根据刚才的测试,我想在REPL中用for代码块包裹的内部函数不能访问上级作用域。
SS = 200
println("函数前的SS=== $SS")
for i in 1:5
AA1 = 200
function add(AA, B)
SS = AA + B # 默认行为 local SS = AA + B
return SS
end
SS = add(AA1, 20)
dd = add(20, 30)
println("函数后的SS $SS")
println("dd==== $dd")
end
但在你提供的终端里面执行的时候SS = AA + B 的默认行为是global SS = AA + B,并且伴随一条警告。总之,现在你可以通过明确使用global SS = AA + B或者local SS = AA + B来达到想要的目的,无论在终端还是REPL执行。