Скажем, у меня есть массив:
array = [6, 6, 6, 4, 4, 6, 4, 4]
, и у меня есть еще один массив строк:
quadrant = ["upper_left", "upper_right", "lower_left", "lower_right"]
, и у меня есть массив 8 x 8, состоящий из местоположений на плате(@board), которые являются объектами nil или Checker.
Моя цель - создать хэш, такой:
hash = { "upper_left" => @board[array[0]][array[1]] ,
"upper_right" => @board[array[2]][array[3]] ,
"lower_left" => @board[array[4]][array[5]] ,
"lower_left" => @board[array[6]][array[7]] }
У меня есть следующий код:
jump_positions = {}
QUADRANTS.each do |quad|
array.each_slice(2) do |coord|
jump_positions[quad] = @board[coord[0]][coord[1]]
end
А затем проверка:
it "should assign board locations as adjacent positions and deliver that info as a whole" do
@bs.board = board.create_board
x_coord = 3
y_coord = 1
jump_assignments = @bs.assign_adjacent_positions(x_coord, y_coord)
jump_assignments["upper_left"].class.should == nil
jump_assignments["upper_right"].class.should == nil
jump_assignments["lower_left"].class.should == Checker
jump_assignments["lower_right"].class.should == Checker
end
завершается неудачей, потому что все назначения относятся к классу 'Checker' и выясняется, что все они являются одним и тем же объектом 'Checker'.Я знаю, что это происходит потому, что циклы вложены так, что все 'quad' ключи инициализируются до последнего расположения платы.
Есть ли способ, которым я могу присвоить значение ключу со значением из 'массив 'за один проход, чтобы они были назначены правильно?Имеет ли этот вопрос смысл?