在types的文档中,内容为:
具有不变类型的对象通过复制传递(在赋值语句和函数调用中),而可变类型通过引用传递。
当无法更改对象时,复制整个对象的目的是什么?为什么不只复制参考?
此外,当我尝试使用
进行测试时struct Foo
bar::Int
end
x = Foo(10)
y = x
pointer_from_objref(x) # Ptr{Void} @0x00000001141ea760
pointer_from_objref(y) # Ptr{Void} @0x00000001141ea760
它表明对象是相同的。我误会了吗?
感谢您的帮助!
答案 0 :(得分:0)
pointer_from_objref在您不可变类型上不起作用。结果取决于您调用它的上下文。
尝试类似
function test(x) return pointer_from_objref(x) end
println(test(x))
println(test(y))
考虑到the source试图为不可变的参数引发错误,我实际上感到非常惊讶。
对于您很小的不可变对象,实际上一个副本(或仅将值保留在一个注册者中)比绕开指针(指针与int大小相同,显然也需要复制到)便宜得多。函数调用)。