Ruby:未定义的局部变量(NameError) - 但它已定义

时间:2015-12-24 19:24:34

标签: ruby variables nameerror

这是我的Naughts and Crosses(tic-tac-toe)游戏代码的一部分。

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

当我运行程序时,我收到错误:

  `check_square'中的

:未定义的局部变量或main的方法`positions':Object(NameError)

然而,它确实在它上面定义。我已经在自己的.rb中运行了代码片段并且它工作正常,所以我不明白为什么它不起作用。我必须假设它与职位范围有关,但至少对我来说(初学者程序员),我不明白为什么它在这里不起作用,而是在自己的程序中。

任何帮助都很高兴。

1 个答案:

答案 0 :(得分:1)

局部变量的范围不能跨越方法定义。从方法定义之外分配的positions在方法定义中不可见。

要使其可见,您可以将其设置为实例变量,类变量,全局变量或常量。或者,您可以将其作为参数传递给方法。