【问题标题】:Julia - Check object has attributeJulia - 检查对象是否具有属性
【发布时间】:2019-10-18 11:58:13
【问题描述】:

假设我有struct,如下所示。

struct Foo
    attr1
    attr2
end

然后我可以实例化并获取attr1attr2

julia> foo = Foo(1,2)

julia> foo.attr1
1

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

作为参考,pythonhasattr,这正是我在这里寻找的,但我似乎在 julia 中找不到等价物。

任何帮助将不胜感激。

编辑:我在 Julia 1.1.0

【问题讨论】:

    标签: oop julia


    【解决方案1】:

    如果你在 julia 1.1 或 1.0,你可以定义自己的hasproperty

    hasproperty(x, s::Symbol) = s in fieldnames(typeof(x))
    

    这(几乎)与 julia 1.2 base 及更高版本中的功能相同

    【讨论】:

    • 谢谢!我看到了fieldnames,但没有意识到它以::DataTypes 作为参数而不是对象。
    • 在 Julia 版本 >= 1.2 中有两个函数,haspropertyhasfield。您在此处编写的实现似乎更适合命名为hasfield。属性可以是字段,但它们也可以是实际未存储的“虚拟字段”。在 1.0 版中,您可以使用 propertynames 来实现 hasproperty,而不是 fieldnames
    【解决方案2】:

    对于 Julia v1.2 或更高版本,在此处记录:hasproperty

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

    【讨论】:

    • 啊,不幸的是它至少需要 Julia 1.2.0。我在 Julia 1.1.0 中,Julia 1.1.0 有什么解决方法吗?还是谢谢!
    猜你喜欢
    • 2013-12-26
    • 2014-05-08
    • 1970-01-01
    • 2013-07-03
    • 2017-10-09
    • 2012-02-02
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多