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

你會推薦我用什麼來代替? –

相關問題