gpt4 book ai didi

function - 函数在 Julia 中可以是局部的吗?这意味着什么?

转载 作者:行者123 更新时间:2023-12-04 15:44:09 25 4
gpt4 key购买 nike

根据使用 Julia 1.1 的 Julia repl,这是有效的 Julia:

julia> local function f()
5
end
(::getfield(Main, Symbol("#f#8"))) (generic function with 1 method)

模块中的局部函数是什么意思?是私有(private)的还是公共(public)的?不是所有函数都默认声明为局部函数吗?如果是这样的话,local 关键字对于函数来说是多余的吗?

最佳答案

What does having local function in say a module mean?

我认为这种语法应该被禁止。没有记录它的作用。我开了讨论here澄清这个问题。

Is it private is it public?

据我所知,此语法定义了一个未引入模块全局方法表的函数。因此,这个定义实际上类似于定义一个匿名函数,所以你可以这样做:

julia> x = (local f() = 1)
(::getfield(Main, Symbol("#f#3"))) (generic function with 1 method)

julia> x()
1

Are not all functions declared local by default for the scope that they are declared in?

是的。不允许从本地范围向全局方法表添加方法。唯一的方法是使用 eval,通常不推荐在普通代码中使用。

And if that is the case the local keyword is redundant for functions?

不,它不是完全冗余的,因为有时在嵌套的局部作用域中需要它(通常 local 在局部作用域中对于任何变量名都需要)。看这个例子:

julia> function f1()
f2() = 10
for i in 1:2
f2() = i
println(f2())
end
end
f1 (generic function with 1 method)

julia> f1()
ERROR: UndefVarError: i not defined
Stacktrace:
[1] f1() at .\REPL[3]:2
[2] top-level scope at none:0

julia> function f1()
f2() = 10
for i in 1:2
local f2() = i
println(f2())
end
end
f1 (generic function with 1 method)

julia> f1()
1
2

编辑

正如 Discourse 中所指出的,这里是对这个问题的解释 https://github.com/JuliaLang/julia/issues/10472#issuecomment-321584501在 GitHub 上。

总而言之——它像我假设的那样工作,技术原因是,如果 Julia 在全局范围内看到 local 关键字,则会创建一个隐式本地范围,因此值可以泄漏到这个范围之外,但不会变量绑定(bind)。

关于function - 函数在 Julia 中可以是局部的吗?这意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56605407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com