Ruby中reverse!方法执行结果疑问:为何最后输出[1,2,3]
问题解析:Ruby中
reverse!的原地修改特性 先拆解你的代码执行流程:
address = [1,2,3] p address # 输出[1,2,3],此时数组初始状态为[1,2,3] new_address = address.reverse! # 关键:reverse!是**原地反转**方法,直接修改address指向的数组,将其变为[3,2,1],同时返回这个被修改后的数组对象 p new_address # 输出[3,2,1],因为new_address和address指向的是同一个数组 p address.reverse! # 此时address指向的数组是[3,2,1],调用reverse!再次原地反转,数组变回初始的[1,2,3],方法返回修改后的数组,所以输出[1,2,3]
核心原因总结:
reverse!是原地修改数组的方法,它不会创建新数组,而是直接改变调用它的数组本身,执行完毕后返回这个被修改的数组对象。- 第一次调用
address.reverse!后,address和new_address指向同一个数组;第二次调用address.reverse!时,是把已经反转过的数组再次反转,自然回到了初始状态。
如果想得到你预期的[3,2,1],可以改用非原地修改的reverse方法(它会返回新数组,不改动原数组),或者调整原地修改的调用逻辑。
内容的提问来源于stack exchange,提问作者Anthony Newton
相关产品推荐
相关产品推荐

