Я делаю класс Grid
для "Connect Four": я создаю массив строк из Square
объектов, а затем создаю массив столбцов, вызывая метод transpose
для массива строк:
class Grid
Square = Struct.new(:state)
def initialize
@grid_strings = Array.new(6) { Array.new(7) {Square.new} }
@grid_columns = @grid_strings.transpose
end
И у меня есть метод, который помещает символ в конец выбранного столбца, изменяя атрибут state
соответствующего Square
экземпляра:
def put_to_column(column_index, symbol)
column = @grid_columns[column_index - 1]
loop do
square = column.pop
raise "Full column" if square.nil?
if square.state.nil?
square.state = symbol
break
end
end
end
Проблема в том, что когда я несколько раз вызываю put_to_column
, он корректно изменяет объекты square
, но только в массиве @grid_strings
. Если я проверю массив @grid_columns
, все объекты square
по-прежнему будут иметь атрибут state
, назначенный для nil.
Я не могу найти место, где я совершил ошибку, и надеюсь, что вы можете помочь.