按需加载Julia模块

问题描述 投票:2回答:1

我有一个非常简单的问题。是否有可能在Julia中按需加载模块。也就是说,模块可以在实际需要时加载,而不是在顶层的“分析时”加载。

我想到的用例场景是我有一些代码能够使用PyPlot进行一些绘图,但代码远非总是执行。

目前这意味着我在顶层有一个像using PyPlot这样的语句,这需要相当多的时间来加载。

(是的,我知道:不应该经常重新启动Julia,bla bla bla ......但是这是一个令人烦恼的地方)

有没有办法确保只加载PyPlot是否真的需要?最简单的想法是将using PyPlot包含在实际进行绘图的函数中

function my_plot()
    using PyPlot
    plot(1:10,1:10)
end

但这会导致语法错误:

ERROR: syntax: "using" expression not at top level

那么,还有另一种方法来实现这一目标吗?

matplotlib julia
1个回答
3
投票

“using”语句在遇到代码行时运行,而不必位于文件的顶部。它确实需要在全局范围内,这意味着在执行“using”语句后,加载“using”的模块中的变量将可用于程序中的所有函数,而不仅仅是可能发生的单个函数。函数的局部范围。

如果将using语句作为Julia eval语句中的表达式调用,则在Julia的“eval”语句中执行的所有代码都会在全局范围内自动完成,即使eval在函数的本地范围内被语法调用也是如此。所以如果你使用宏@eval

function my_plot()
    @eval using PyPlot  # or without the macro, as eval(:(using PyPlot))
    plot(1:10,1:10)
end

这就像使用PyPlot在函数外部完成一样,因此避免了语法错误。

© www.soinside.com 2019 - 2024. All rights reserved.