来自Julia的文档:
Julia函数参数遵循有时称为“pass-by-sharing”的约定......
这是否意味着更改函数内的可变对象也会更改调用者范围内的对象?
但是如果对象是不可变的,那么在函数内部更改它不会影响调用者范围内的对象吗?在这种情况下是否与传递值有任何不同?
我是否正确,在函数末尾添加!
只是一个约定,但在编译中没有任何语义含义?
传递用户定义的复合类型的可变对象的值的最佳方法是什么?我尝试使用copy()
,但收到的错误是我没有为我的自定义类型定义copy()
。我想我需要为我的自定义类型扩展copy()
。我可以在哪里找到其他类型copy()
的定义(想在撰写扩展时将它们作为参考)?
答案 0 :(得分:3)
简短的回答是是。但请记住:"更换对象"是一个广泛的概念,它是否分配了一个新的内存位置?如果在函数作用域中重新分配局部变量,则肯定会切断与调用者的共享字符串。 - > read more about mutation and assignment
这是因为不可变是不可变的,所以改变它的唯一方法是分配一个新的内存位置,这样就可以减少共享字符串。
是的,你是对的。
改为使用deepcopy()
。