考虑以下:
a=[0,1] #our starting value a=[a,1] #=> [[0,1],1] as expected
我期望以下结果具有相同的结果:
a=[0,1] #same starting place a[0]=a #should make a the same thing as it was above,right? a #=> [[...],1] !!!
在第一个示例中,第二个赋值是指赋值之前的a值.在第二个示例中,第二个赋值执行递归赋值.这对我来说就像是不同的行为.这种行为实际上是否一致?如果是这样,有人可以解释原因吗?
解决方法
在第一个示例中,您将创建一个值为[[0,1]的新数组.然后你重新分配a来引用这个数组.
在第二个示例中,您不是在创建新数组,也不是在更改引用的内容.您正在更改现有数组以包含对自身的引用.那是非常不同的.
更多细节
a = [0,1] # Step 1 b = [a,1] # Step 2 a = b # Step 3
在图片中它看起来像这样:
>第1步 – 创建一个数组:
--- |a| --- | v [0,1]
--- --- |a| |b| --- --- | | | v | [ref,1] | | +------------+ v [0,1]
>步骤3 – 将a更改为指向在步骤2中创建的阵列:
--- --- |a| |b| --- --- | | +----------+ v [ref,1] | +-------------+ v [0,1]
另一方面,第二个示例中的代码为您提供:
--- |a| --- | +---+ | v | [ref,1] | | +-----+
原文地址:https://www.jb51.cc/ruby/268558.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。