如何检查Julia中的模块内是否定义了变量?

时间:2016-06-14 23:11:14

标签: julia

isdefined(:x)将告诉您是否在当前工作空间中定义了变量x。

如果我想检查模块中定义的变量(不是导出的变量),我该怎么做?我尝试了以下所有方法:

julia> module Test
       x = 1
       end
Test

julia> x
ERROR: UndefVarError: x not defined

julia> isdefined(:x)
false

julia> Test.x
1

julia> isdefined(:Test.x)
ERROR: type Symbol has no field x

julia> isdefined(:Test.:x)
ERROR: TypeError: getfield: expected Symbol, got QuoteNode

julia> isdefined(Test.:x)
ERROR: TypeError: getfield: expected Symbol, got QuoteNode

在上面的模块测试中,我想检查是否定义了x。

3 个答案:

答案 0 :(得分:11)

isdefined有一个可选参数来执行此操作。尝试:

isdefined(Test, :x)

通过常规渠道提供的更多信息:?isdefined在REPL和书中:http://docs.julialang.org/en/release-0.4/stdlib/base/#Base.isdefined(链接可能适用于旧版本,因此当前占主导地位的搜索引擎会提供帮助)。

答案 1 :(得分:5)

我认为你需要

:x in names(Test) 

答案 2 :(得分:0)

在Julia 1.1.0中,isdefined的第一个参数不是可选的,而是有一个@isdefined(x)宏,用于测试是否定义了x。在Test中调用它,检查在Test中是否定义了x(是否继承)。