朱莉娅论证传递行为

abe*_*ysh 5 object parameter-passing julia

来自Julia的文档:

Julia函数参数遵循有时称为"pass-by-sharing"的约定......

  1. 这是否意味着更改函数内的可变对象也会更改调用范围内的对象?

  2. 但是如果对象是不可变的,那么在函数内部更改它不会影响调用者范围内的对象吗?在这种情况下,它与传递值有什么不同吗?

  3. 我是对的,!在函数末尾添加只是一个约定,但在编译中没有任何语义含义?

  4. 传递用户定义的复合类型的可变对象的值的最佳方法是什么?我尝试使用copy(),但得到错误说copy()没有为我的自定义类型定义.我想我需要扩展copy()我的自定义类型.在哪里可以找到copy()其他类型的定义(想在编写扩展时使用它们作为参考)?

Rez*_*lan 3

  1. 这是否意味着更改函数内的可变对象也会更改调用者范围内的对象?

简短的回答是肯定的。但请注意:“更改对象”是一个广泛的概念,它是否分配了新的内存位置?如果您在函数作用域中重新分配局部变量,那么与调用者共享的字符串肯定会被删除。-->阅读有关突变分配的更多信息

  1. 但是,如果对象是不可变的,那么在函数内更改它不会影响调用者范围内的对象吗?在这种情况下,它与按值传递有什么不同吗?

这是因为不可变的东西是不可变的,所以改变它的唯一方法是分配一个新的内存位置,这样共享字符串就会被切断。

  1. 我说的对吗?函数末尾只是一个约定,但在编译中没有任何语义意义?

是的你是对的。

  1. 什么 .... ?

deepcopy()代替使用。