我有一个非常简单的问题。是否可以按需在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
那么,还有另一种方法可以实现这一目标吗?
答案 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一样,从而避免了语法错误。