我想知道为什么以下代码无法直接修改数组。
我的代码如下:
@card.map!.with_index {|value, key| key.even? ? value*=2 : value}
这段代码遍历一个数组,对于所有偶数下标的元素进行值的翻倍操作。
接着我执行了以下操作:
@card.join.split('').map!{|x| x.to_i}
将数组连接成一个巨大的数字,将它们分割为单个数字,然后将它们映射回整数数组。从步骤一到步骤二唯一的真正变化是步骤一看起来像a=[1,2,12],而步骤二看起来像a=[1,2,1,2]。对于第二步,即使我在p @card时使用.map!,在第一步之后它看起来完全相同。如果我想继续使用新数组,我必须将第二步设置为某些内容。为什么会这样?第二步中的.map!是否不会直接修改数组?或者我的方法链接是否抵消了我的能力? 致敬。
value*=2
是误导性的,你应该改为写成value * 2
。 - David Grayson