object - Julia 参数传递行为

标签 object parameter-passing julia

来自 Julia 的文档:

Julia function arguments follow a convention sometimes called “pass-by-sharing”...


  • 这是否意味着更改函数内的可变对象也会更改调用者范围内的对象?
  • 但是如果对象是不可变的,那么在函数内部更改它不会影响调用者范围内的对象?在这种情况下,它与按值传递有什么不同吗?
  • 添加 ! 对吗?在函数末尾只是一个约定,但在编译中没有任何语义意义?
  • 传递用户定义复合类型的可变对象的值的最佳方法是什么?我尝试使用 copy() ,但得到的错误是 copy()没有为我的自定义类型定义。我想我需要扩展 copy()对于我的自定义类型。我在哪里可以找到 copy() 的定义对于其他类型(希望在编写扩展时将它们用作引用)?
  • 最佳答案

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

  • 简短的回答是 .但是请记住:“更改对象”是一个宽泛的概念,是否为它分配了新的内存位置?如果你在函数作用域内重新分配一个局部变量,肯定会切断与调用者的共享字符串。 --> read more about mutation and assignment
  • 但是如果对象是不可变的,那么在函数内部更改它不会影响调用者范围内的对象?在这种情况下,它与按值传递有什么不同吗?

  • 那是因为一个不可变的不是可变的,所以改变它的唯一方法是分配一个新的内存位置,这样共享字符串将被切断。
  • 我说的对吗!在函数末尾只是一个约定,但在编译中没有任何语义意义?

  • 你是对的。
  • 什么 .... ?

  • 使用 deepcopy()反而。

    关于object - Julia 参数传递行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34607967/

    相关文章:

    y=1/x 的 Julia 方法错误

    julia - 更改 Julia 数组中的值并得到奇怪的结果?

    java - 我的 RMI 服务器中的对象为空

    无参数传递或返回值的 C 程序汇编函数

    c++ - 对象在 assembly 级的x86中如何工作?

    java - 如何有条件地将 Java 中的参数传递给采用可变数量参数的方法?

    c# - 为什么 'int' 可以被视为 'ushort' 而不是在扩展方法中作为参数传递时,什么是优雅的解决方案?

    julia - 如何使用多个数组图制作 GIF?

    node.js - 从URL获取对象属性值

    c++ - 使用许多对象重载加法运算符 C++