Ruby:为什么所有坐标都在一个数组中更新?

Y.Z*_*Y.Z 2 ruby

我正在尝试更改特定的坐标,但是数组正在更新所有坐标。

目标是将fixed属性更改为单个坐标。

class Case
  attr_accessor :fixed

  def initialize
    self.fixed = false
  end

  def fixed?
    !!fixed
  end
end

def display(arr)
  5.times do |x|
    5.times do |y|
      print arr[x][y].fixed?
      print ' '
    end

    puts
  end
end

# Defining array
arr = Array.new(5){ Array.new(5, Case.new) }

# Displaying the arrays
display(arr)

# Changing value of a single coord
arr[2][3].fixed = true

# Displaying the arrays
display(arr)

Run Code Online (Sandbox Code Playgroud)

这是第一个显示呼叫的结果

false false false false false 
false false false false false 
false false false false false 
false false false false false 
false false false false false 
Run Code Online (Sandbox Code Playgroud)

和第二个显示

false false false false false 
false false false false false 
true true true true true 
false false false false false 
false false false false false 
Run Code Online (Sandbox Code Playgroud)

预期结果是:

false false false false false 
false false false false false 
false false false true false 
false false false false false 
false false false false false 
Run Code Online (Sandbox Code Playgroud)

Sar*_*tts 6

问题是您将同一实例多次放置在行中。要使数组中的每个项目成为新对象,请将数组定义更改为以下内容:

arr = Array.new(5){ Array.new(5) {Case.new}   }
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见此问题:如何创建对象数组?