Почему происходит ошибка в коде динамического назначения константы Ruby - PullRequest
1 голос
/ 16 октября 2019
# Global constants

X = "X"             # cross
O = "O"             # toe
EMPTY = ""          # empty board
TIE = "DRAW"        # draw state
NUMBER_SQUARES = 9  # number of fields on the board

Создает новую игровую доску - список из девяти элементов, равный EMPTY и возвращает его

def new_playing_board
    create_board = Array.new(NUMBER_SQUARES) { EMPTY }
end

board = new_playing_board

Функция берет доску и возвращает победителя игры. Могут быть возвращены четыре возможных значения: "X", "O" - компьютер или человек, TIE - если все поля заполнены, nil - одно из полей пусто, а победитель не определен

def win_play(board)

    WAYS_TO_WIN = [    # backtrace error: dynamic constant assignment WAYS_TO_WIN = [ rb:136
                [0, 1, 2],
                [3, 4, 5],
                [6, 7, 8],
                [0, 3, 6],
                [1, 4, 7],
                [2, 5, 8],
                [0, 4, 8],
                [2, 4, 6]
                ]


    WAYS_TO_WIN.each do |row|
        if (board[row[0]] == board[row[1]] && board[row[0]] == board[row[2]]) != EMPTY
            winner = board[row[0]]
            return winner
        end

        unless board.include?(EMPTY)
            return TIE
        end
    end

    return nil 

end


win_play(board)

backtrace: динамическое присвоение констант WAYS_TO_WIN = [rb: 136

1 Ответ

1 голос
/ 16 октября 2019

Вы переназначаете WAYS_TO_WIN каждый раз, когда win_play вызывается

def win_play(board)

    WAYS_TO_WIN =

, определяет WAYS_TO_WIN вне метода, например, со всеми другими константами

NUMBER_SQUARES = 9  # number of fields on the board
WAYS_TO_WIN = ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...