不可思议的Ruby:矢量分配示例

前端之家收集整理的这篇文章主要介绍了不可思议的Ruby:矢量分配示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_1@考虑以下:
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]

>第2步 – 创建另一个数组,其中包含对第一个的引用:

    ---        ---
    |a|        |b| 
    ---        ---
     |          |
     |          v
     |          [ref,1]
     |            |
     +------------+
     v 
     [0,1]      

>步骤3 – 将a更改为指向在步骤2中创建的阵列:

    ---        ---
    |a|        |b| 
    ---        ---
     |          |
     +----------+
                v
                [ref,1]
                  |
    +-------------+
    v 
    [0,1]      

另一方面,第二个示例中的代码为您提供:

    ---
    |a|
    ---
     |
 +---+
 |   v
 |   [ref,1]
 |     |
 +-----+

这里仍然只有一个数组,并且仍指向它.但现在数组中的第一个元素引用了数组本身.

猜你在找的Ruby相关文章