在C中,可以声明具有局部函数范围的静态变量(示例).
朱莉娅可以做类似的事吗?
我的用例是声明子函数,但不希望Julia每次执行代码时都必须重新解析它们.在函数之外声明它们是丑陋的并且给它们更高的范围,我想避免它.
例:
function foo(x)
static bar = t -> stuff with t
...
bar(y)
...
end
Run Code Online (Sandbox Code Playgroud)
虽然我可以在foo()之外声明bar(),但我更喜欢bar只在本地命名空间中.
谢谢.
iva*_*rne 12
您可以围绕函数创建新范围,以保存变量.
let
global foo
function bar(t)
#stuff with t
end
y = 2
function foo(x)
#...
bar(y)
#...
end
end
Run Code Online (Sandbox Code Playgroud)
然后只有foo(x)
外面可见
请注意,y
在@ivarne的答案中需要将其作为let变量,否则它将覆盖y
全局范围内的任何变量:
julia> y = 4
4
julia> let
global foo
function bar(t)
#stuff with t
end
y = 2
function foo(x)
#...
bar(y)
#...
end
end
foo (generic function with 1 method)
julia> y
2
Run Code Online (Sandbox Code Playgroud)
基于@ivarne 的回答。
let bar = t -> t^2
global foo
function foo(x)
bar(x)
end
end
Run Code Online (Sandbox Code Playgroud)
但我不认为这是一个理想的解决方案。恕我直言,最好有一个static
关键字。额外的块是笨重的。在 Julia 开发中有一些关于这个的讨论:
https://github.com/JuliaLang/julia/issues/15056
https://github.com/JuliaLang/julia/issues/12627