我正在尝试弄清楚是否可以使用不明确的包名称,例如
DataFrames
等,或者作为带有 using
的该模块名称的字符串变量。我的测试代码是:
dependencies=["CSV", "DataFrames", "Plots"]
for pkg in dependencies
if !haskey(installed_packages, pkg)
Pkg.add(pkg)
end
print(pkg)
using .pkg
end
它在
using .pkg
上中断(也尝试不带点的id,有错误
TypeError: in using, expected Symbol, got a value of type Core.SlotNumber
因为您想要做的是语法(更改
using
之后的项目的解释方式),所以您需要 @eval
宏:
@eval using $(Symbol(pkg))
您可以检查这与常规版本的
using
具有相同的语法表示,这证明它是正确的:
let pkg = "Plots"
@assert :(using Plots) == :(using $(Symbol(pkg)))
end