Я пытаюсь сделать игру с tic tac toe. У меня есть хорошая идея, куда идти, и я знаю, в чем проблема, но я не знаю, как это исправить. Когда я создаю функцию, я устанавливаю переменные для этой функции. i = 0, row1 = [], но когда я повторяю через функции, каждый раз, когда функция снова вызывается, строка 1 возвращается в пустую из-за начальной строки1 = [], а счетчик, который я хочу использовать, i = 0, возвращается к 0 каждый раз, потому что начало функции я устанавливаю мои переменные. Я думаю, что решение может состоять в том, чтобы сделать переменную global и установить ее из функции, но я не уверен, как это сделать. Но если у кого-то есть какие-то предложения, мы будем очень благодарны. Вот код проблемы.Ruby пытается сохранить элементы массива при повторении через функции
def row1(player)
row1 = []
row1[player - 1] = "X"
puts "#{row1}"
end
def choosespot_x
puts "X -- Choose a spot"
move = gets.chomp.to_i
if move <= 3
row1(move)
end
choosespot_x
end
Не использовать рекурсию здесь, петля на самом деле то, что вы хотите: 'петли делать ... end' – tadman
Я думаю, что это будет лучше пояснить * почему * вы рекомендуете против Tail Recursion, потому что Tail Recursion на самом деле является совершенно естественным интуитивным способом петлирования. (О чем свидетельствует тот факт, что кто-то, кто, похоже, является новичком в программировании, добился для него самого легкого и наиболее очевидного решения). Проблема в том, что Ruby не имеет правильных хвостовых вызовов (на самом деле правильная регенерация хвоста будет достаточно в этом случае), и, таким образом, Tail Recursion потенциально ударит стек. (Вероятно, не в этом случае, хотя, в конце концов, редко будет более 9 «итераций» в «петле».) –