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

Ruby中Array.new初始化Frame数组出现实例变量共享异常问题排查

问题原因

你的代码问题出在Game类初始化frames数组的写法上,和Frame类本身的定义无关。
Ruby中Array.new(10, Frame.new)这种语法,只会执行一次Frame.new实例化操作,然后把这同一个Frame实例的引用填充到数组的10个位置里。你看到的10个Frame实例本质上是同一个对象,修改任意一个元素的rolls属性,所有数组元素的对应属性都会同步变化,才会出现所有帧的rolls都是完整20个数字拼接的情况。

修复方案

把数组初始化的写法改成带块的形式即可:

class Game
  attr_accessor :frames
  def initialize
    # 带块的写法会为每个数组位置单独执行一次Frame.new,生成10个独立的Frame实例
    @frames = Array.new(10) { Frame.new } 
  end
  
  def print_frames
    @frames.each_with_index do |frame, idx|
      p "Frame ##{idx+1}: #{frame.rolls}"
    end
  end
end

修改后运行代码即可得到预期输出,每个Frame的rolls属性仅保存对应2次投球的记录,逐行打印10个帧的独立数据。

内容的提问来源于stack exchange,提问作者Ridhwaan Shakeel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 05:27:04