朱莉娅论证传递行为

时间:2016-01-05 09:16:53

标签: object parameter-passing julia

来自Julia的文档:

  

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

  1. 这是否意味着更改函数内的可变对象也会更改调用者范围内的对象?
  2. 简短的回答是。但请记住:"更换对象"是一个广泛的概念,它是否分配了一个新的内存位置?如果在函数作用域中重新分配局部变量,则肯定会切断与调用者的共享字符串。 - > read more about mutation and assignment

    1. 但是如果对象是不可变的,那么在函数内部更改它不会影响调用者范围内的对象吗?在这种情况下,它与传递值有什么不同吗?
    2. 这是因为不可变是不可变的,所以改变它的唯一方法是分配一个新的内存位置,这样就可以减少共享字符串。

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

        1. 什么......?
        2. 改为使用deepcopy()