gpt4 book ai didi

module - @everywhere 的评估上下文

转载 作者:行者123 更新时间:2023-12-04 16:53:19 27 4
gpt4 key购买 nike

考虑以下代码:

module Mod

function f()
@everywhere store(v) = println(12+v)
g(3,Main.store)
end

function g(n,p)
for i in 1:n
p(8)
end
end

end

Mod.f()

感兴趣的线路是 g(3,Main.store) .在不指定模块的情况下,在 REPL(w.r.t Main)上执行此代码段会导致 UnDefVarErrror: store .

是否根据设计在当前 Module 中不评估该生产线? ?为什么?串行对应(没有 @everywhere 运行良好,无需指定 Main )。

最佳答案

如果我的理解正确,@everywhere宏本质上告诉 julia 执行指令 store(v) = println(12+v)在所有进程上(包括主进程,即运行 REPL 的进程)。换句话说,这发生在每个进程的全局范围内。因此,在此步骤之后,您可以访问 store 是有意义的。功能通过 Main.store ,即在进程的最外层作用域,因为它不存在于当前作用域中(即在您的模块/f 函数中)。

我假设“串行对应”是指直接输入 REPL:

function f()
store(v) = println(12+v)
g(3, store)
end

function g(n,p)
for i in 1:n
p(8)
end

f()

在这种情况下,是的,这是一个完全不同的场景。 store函数现在是 f() 的本地函数,这就是你使用它的地方,所以尝试使用命名空间限定符从其他地方访问它是没有意义的。

关于module - @everywhere 的评估上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047998/

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