Julia ---- fields 和 properties 的区别

fields 只是一个结构体的一个字段

struct A
   b
   c::Int
end

结构体A有两个字段:b,c,这时候可以用getfield 获取结构体实例的字段,如:

a = A("foo", 3)
getfield(a, :b)

在早期版本中 通过a.b 下标的方式获取字段,这与getfield(a, :b) 作用是一样的,现在情况是

a.b 与getproperty(a, :b) 默认是一致的。

getproperty(a::Type, v::Symbol) = getfield(a, v)

 

其实没有太多变化,但是用户可以通过重载getproperty()来实现额外的功能,但是不能通过重载getfield(a, v)

代码样例

struct A
   b
   c::Int
end
a = A("foo", 3)
getfield(a, :b)

function Base.getproperty(a::A, v::Symbol)
           if v == :c
               return getfield(a, :c) * 2
           elseif v == :q
               return "q"
           else
               return getfield(a, v)
           end
end

a.q
#"q"

getfield(a, :q) #会报异常
#type A has no field q
#top-level scope at struct:21

a.c
#6

 

你可能感兴趣的:(julia机器学习&科学计算,Julia,getfield,getproperty,getproperty)