Julia - 检查对象是否具有属性

Dar*_*her 5 oop julia

假设我有struct如下。

struct Foo
    attr1
    attr2
end
Run Code Online (Sandbox Code Playgroud)

然后我可以实例化并attr1获取attr2

julia> foo = Foo(1,2)

julia> foo.attr1
1
Run Code Online (Sandbox Code Playgroud)

我只是想知道我是否可以检查我的对象foo有什么attr1

作为参考,pythonhasattr正是我在这里寻找的东西,但我似乎无法在julia.

任何帮助,将不胜感激。

编辑:我在 Julia 1.1.0

lon*_*000 8

如果您使用的是 julia 1.1 或 1.0,您可以定义自己的hasproperty

hasproperty(x, s::Symbol) = s in fieldnames(typeof(x))
Run Code Online (Sandbox Code Playgroud)

这(几乎)与 Julia 1.2 基础及更高版本中的功能相同

  • 在 Julia 版本 >= 1.2 中,有两个函数:“hasproperty”和“hasfield”。您在这里编写的实现似乎更适合命名为“hasfield”。属性可以是字段,但也可以是实际未存储的“虚拟字段”。在 1.0 版本中,您可以根据“propertynames”而不是“fieldnames”来实现“hasproperty”。 (4认同)

Jun*_*ian 6

对于 Julia v1.2 或更高版本,记录如下:hasproperty

如果您使用的是 Julia 1.1.0,那么我认为您可以在Compat.jl中使用该函数