按需加载Julia模块

时间:2019-04-05 08:37:40

标签: matplotlib julia

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

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

此刻,这意味着我在顶层有一条类似using PyPlot的语句,这需要花费大量时间才能加载。

(是的,我知道:人们不应该经常重启Julia,但是……这还是很烦人的事情)

是否有一种方法可以确保仅在实际需要时才加载PyPlot? 最简单的想法是将using PyPlot包含在实际进行绘图的函数中

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

但这会导致语法错误:

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

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

1 个答案:

答案 0 :(得分:3)

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

如果您在Julia eval语句中将using语句作为表达式调用,则在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一样,从而避免了语法错误。