ruby - 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
解决方案
问题是您在行中多次放置相同的实例。要使数组中的每个项目成为新对象,请将数组定义更改为以下内容:
arr = Array.new(5){ Array.new(5) {Case.new} }
有关更多信息,请参阅此问题:如何创建对象数组?
推荐阅读
- python - 如何有选择地将参数传递给 django 日志记录?
- github-api - 如何使用 Github GraphQL 搜索返回具有相似名称(包括登录名和显示名)的用户配置文件?
- javascript - 未捕获的 ReferenceError:未定义导入的类
- wpf - 从 xaml 绑定到 System.Windows 枚举
- scala - Spark 在集群中使用 Docker:BlockManagerId;本地类不兼容
- angular - Angular 内置指令不适用于 Foundation 组件
- deep-learning - 批量大小是如何确定的?
- c# - 将 SqlBotDataStore 用于机器人状态回退到 state.botframework.com
- vba - Excel 2013 VBA 运行时错误 5 与 listobjects.add
- swift - 字段级自定义解码器