我有一个非常简单的问题。是否有可能在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
那么,还有另一种方法来实现这一目标吗?
“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在函数外部完成一样,因此避免了语法错误。