我得到一个no方法-在定义方法结束后定义方法时,方法未定义错误。在此之前定义的方法有一个if..else语句块,可能在此处造成问题
我尝试在“问题产生方法”之前定义所提到的方法,在这种情况下,我的方法可以正常工作。但是,如果在该特定方法之后定义了任何方法,则会收到相同的错误消息。
def display_board(board)
puts " #{board[0]} | #{board[1]} | #{board[2]} "
puts "-----------"
puts " #{board[3]} | #{board[4]} | #{board[5]} "
puts "-----------"
puts " #{board[6]} | #{board[7]} | #{board[8]} "
end
def input_to_index(pos)
pos = pos.to_i - 1
end
def valid_move?(board, pos)
if pos.between?(0,8)
if board[pos] == " "
return true
else
return false
end
else
return false
end
def move(board, pos, type)
board[pos] = "#{type}"
end
end
理想情况下,它应该通过所有测试用例。但是我遇到了这个特殊错误:
1) ./lib/turn.rb #move allows "X" player in the bottom right and "O" in the top left
Failure/Error: move(board, 0, "O")
NoMethodError:
undefined method `move' for #<RSpec::ExampleGroups::LibTurnRb::Move:0x0000000001db90d8>
# ./spec/turn_spec.rb:70:in `block (3 levels) in <top (required)>'
答案 0 :(得分:3)
您必须先关闭valid_move?
方法,然后再声明新方法(move
)...
def valid_move?(board, pos)
if pos.between?(0,8)
if board[pos] == " "
return true
else
return false
end
else
return false
end
end
def move(board, pos, type)
board[pos] = "#{type}"
end
如果在另一个方法中声明了move
方法,则该方法在主程序中不可见。
答案 1 :(得分:0)
您在move
中定义的valide_move?
可以尝试使用更好的代码编辑器来美化。 :)
def valid_move?(board, pos)
if pos.between?(0,8)
if board[pos] == " "
return true
else
return false
end
else
return false
end
def move()
board[pos] = "#{type}"
puts "a"
end
end