JnB*_*ymn 7 ruby syntax programming-languages
考虑以下:
a=[0,1] #our starting value
a=[a,1] #=> [[0,1],1] as expected
Run Code Online (Sandbox Code Playgroud)
我期望以下结果具有相同的结果:
a=[0,1] #same starting place
a[0]=a #should make a the same thing as it was above, right?
a #=> [[...],1] !!!
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,第二个赋值是指a赋值之前的值.在第二个示例中,第二个赋值执行递归赋值.这对我来说就像是不同的行为.这种行为实际上是否一致?如果是这样,有人可以解释原因吗?
Mar*_*ers 14
在第一个示例中,您将创建一个值为[[0,1],1] 的新数组.然后你重新分配a以引用这个数组.
在第二个示例中,您不是在创建新数组,也不是在更改a引用的数组.您正在更改现有数组以包含对自身的引用.那是非常不同的.
第一个示例大致相当于此代码:
a = [0, 1] # Step 1
b = [a, 1] # Step 2
a = b # Step 3
Run Code Online (Sandbox Code Playgroud)
在图片中它看起来像这样:
--- |a| --- | v [0, 1]
--- ---
|a| |b|
--- ---
| |
| v
| [ref, 1]
| |
+------------+
v
[0, 1]
a为指向在步骤2中创建的数组:
--- ---
|a| |b|
--- ---
| |
+----------+
v
[ref, 1]
|
+-------------+
v
[0, 1]
另一方面,第二个例子中的代码为您提供:
---
|a|
---
|
+---+
| v
| [ref, 1]
| |
+-----+
这里仍然只有一个数组,a仍然指向它.但是现在数组中的第一个元素指的是数组本身.
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |