2015-12-24 128 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

你会推荐我用什么来代替? –

相关问题