不可思议的Ruby:矢量分配示例
发布时间:2020-12-17 04:21:01 所属栏目:百科 来源:网络整理
导读:考虑以下: a=[0,1] #our starting valuea=[a,1] #= [[0,1],1] as expected 我期望以下结果具有相同的结果: a=[0,1] #same starting placea[0]=a #should make a the same thing as it was above,right?a #= [[...],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] | | +-----+ 这里仍然只有一个数组,并且仍指向它.但现在数组中的第一个元素引用了数组本身. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容