Julia在脚本中共享变量

Julia在脚本中共享变量,julia,Julia,我正在使用一个julia脚本,其中定义了两个需要共享变量的函数。这样做的最佳实践是什么?我应该只使用全局变量还是有一个具体的解决方法可以替代?通常,您会按照Benoit的建议将变量传递给这两个函数 但是,如果出于某种原因需要避免这种情况,通常会出现这种情况,例如,当将函数传递给应依赖于某个外部参数的优化例程时,则使用闭包而不是使用全局变量。一般来说,出于性能原因,在Julia中应避免使用非常量全局变量 以下是一个例子: 禁止关闭: julia> using Optim, Benchmark

我正在使用一个julia脚本,其中定义了两个需要共享变量的函数。这样做的最佳实践是什么?我应该只使用全局变量还是有一个具体的解决方法可以替代?

通常,您会按照Benoit的建议将变量传递给这两个函数

但是,如果出于某种原因需要避免这种情况,通常会出现这种情况,例如,当将函数传递给应依赖于某个外部参数的优化例程时,则使用闭包而不是使用全局变量。一般来说,出于性能原因,在Julia中应避免使用非常量全局变量

以下是一个例子:

禁止关闭:

julia> using Optim, BenchmarkTools

julia> c = 10
10

julia> f(x) = (x-c)^2
f (generic function with 1 method)

julia> @btime optimize(f, -100, 100);
  5.500 μs (235 allocations: 3.81 KiB)
现在结束时也是如此。首先我使用
let

julia> @btime let c = 10
       f(x) = (x-c)^2
       optimize(f, -100, 100)
       end;
  139.605 ns (2 allocations: 176 bytes)
您还可以使用以下功能:

julia> function wrap()
       c = 10
       f(x) = (x-c)^2
       optimize(f, -100, 100)
       end
wrap (generic function with 1 method)

julia> @btime wrap();
  139.100 ns (2 allocations: 176 bytes)
同样,如果
c
const
的话,事情也会变得很快(为此启动一个新的Julia会话):


为什么不把这个变量传递给两个函数呢?你说的“共享”是什么意思?funcA是将项传递给funcB,还是两者都使用相同的输入?
julia> using Optim, BenchmarkTools

julia> const c = 10
10

julia> f(x) = (x-c)^2
f (generic function with 1 method)

julia> @btime optimize(f, -100, 100);
  138.603 ns (2 allocations: 176 bytes)