You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:25:35