首页 > 解决方案 > 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)

这是第一次显示调用的结果

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 

和第二个显示器

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 

预期结果是:

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 

标签: ruby

解决方案


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

arr = Array.new(5){ Array.new(5) {Case.new}   }

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


推荐阅读