2015-12-24 4 views
0

Это часть моего кода для игры Naughts and Crosses (tic-tac-toe).Ruby: неопределенная локальная переменная (NameError) - но она определена

positions = [" ", " ", " ", " ", " ", " ", " ", " ", " "] 

# Returns .. 1 = Square already owned, 2 = Blank square, 0 = Enemy square 
def check_square(side, square) 
    if positions[square] == side 
    state = 1 
    elsif positions[square] == B 
    state = 2 
    else 
    state = 0 
    end 
    return state 
end 

Когда я запускаю программу, я получаю ошибку:

in `check_square': undefined local variable or method `positions' for main:Object (NameError)

Однако это буквально определено прямо над ним. Я запустил фрагмент кода в своем собственном .rb, и он отлично работает, поэтому я не понимаю, почему он не работает. Я должен предположить, что это связано с объемом позиций, но, по крайней мере, для меня (начинающий программист), я не понимаю, почему он здесь не работает, а делает в своей собственной программе.

Любая помощь с радостью оценивается.

ответ

1

Область локальной переменной не может пересекать определение метода. positions, который назначается вне определения метода, не отображается из определения метода.

Чтобы сделать его видимой, вы можете сделать ее, например, переменной экземпляра, переменной класса, глобальной переменной или константой. Или вы можете передать его в качестве аргумента для метода.

+0

Спасибо, я установил его в глобальную переменную, и теперь он работает! –

+0

Однако глобальная переменная не рекомендуется в объектно-ориентированном программировании. – sawa

+0

что бы вы порекомендовали использовать вместо этого? –

Смежные вопросы