朱莉娅语言是否支持函数作用域内的静态变量?

17

在C语言中,可以使用具有局部函数作用域的静态变量(示例)。

在Julia语言中能否做到类似的操作呢?

我的使用场景是声明子函数,但不希望每次代码执行时都让Julia重新解析它们。在函数外部声明它们很丑,并且会将其作用域提高到更高层次,这是我想避免的。

示例:

function foo(x)
    static bar = t -> stuff with t

    ...
    bar(y)
    ...
end

虽然我可以在foo()外部声明bar(),但我更愿意让bar()只存在于本地命名空间中。
谢谢。
3个回答

16

你可以在函数周围创建一个新的作用域,来容纳变量。

let
    global foo
    function bar(t)
        #stuff with t
    end
    y = 2
    function foo(x)
        #...
        bar(y)
        #...
    end
end

那么只有foo(x)会对外可见。

5

4
请注意,在 @ivarne 的答案中,y 需要是 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接