gpt4 book ai didi

ruby - 神秘的 ruby : Vector Assignment Example

转载 作者:数据小太阳 更新时间:2023-10-29 06:56:40 24 4
gpt4 key购买 nike

考虑以下几点:

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], 1]。然后您重新分配 a 以引用此数组。

在第二个示例中,您没有创建新数组,也没有更改 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] |     | +-----+

这里还是只有一个数组,a还是指向它。但是现在数组中的第一个元素指的是数组本身。

关于ruby - 神秘的 ruby : Vector Assignment Example,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4822711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com