下面的代码可以复现我的问题:
struct Foo1
sixsix
aa
bb
disposion
end
struct Foo2
aa
bb
end
function Base.:+(f1::Foo1, f2 :: Foo2)
newf = f1
for n in fieldnames(typeof(f2))
getproperty(newf, n) += getproperty(f2, n)
end
return newf
end
尝试了一下getfield,也是同样的错误。
将struct
改成mutable struct
试试?
仍然报错
mutable struct Foo1
sixsix
aa
bb
disposion
end
struct Foo2
aa
bb
end
function Base.:+(f1::Foo1, f2 :: Foo2)
newf = f1
for n in fieldnames(typeof(f2))
getfield(newf, n) += getfield(f2, n)
end
return newf
end
群里有大佬hzgzh解决了,一是Foo1改成mutable,二是改用setproperty!
但是仅将Foo1改为mutable并不能解决问题,这是为什么?
操作等价于对一个函数的返回值赋值,因此报错。
若创建一个新变量作为地址,即可成功编译.