syntax: invalid assignment location "getproperty(newf, n)"

下面的代码可以复现我的问题:

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并不能解决问题,这是为什么?

操作等价于对一个函数的返回值赋值,因此报错。
若创建一个新变量作为地址,即可成功编译.