【问题标题】:Julia argument passing behaviorJulia 参数传递行为
【发布时间】:2016-01-05 09:16:53
【问题描述】:

来自 Julia 的文档:

Julia 函数参数遵循有时称为“传递共享”的约定...

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

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

  3. 在函数末尾添加! 只是一种约定,但在编译中没有任何语义意义,我说对了吗?

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

【问题讨论】:

    标签: object parameter-passing julia


    【解决方案1】:
    1. 这是否意味着更改函数内部的可变对象也会更改调用方范围内的对象?

    简短的回答是。但请保持这一点:“更改对象”是一个广泛的概念,它是否分配了一个新的内存位置?如果您在函数范围内重新分配局部变量,则与调用者的共享字符串肯定会被剪切。 --> read more about mutation and assignment

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

    那是因为不可变是不可变的,所以改变它的唯一方法是分配一个新的内存位置,通过这种方式共享字符串将被切断。

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

    是的,你是对的。

    1. 什么....?

    请改用deepcopy()

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 2020-08-01
      • 2022-12-09
      • 2021-08-24
      • 2016-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多