NoMethod-未定义的方法<方法名称=“”>错误,即使该方法已定义

时间:2019-03-25 14:08:38

标签: ruby

我得到一个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)>'

2 个答案:

答案 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