即使方法已定义也会出错,ruby"/>

首页 > 解决方案 > NoMethod - 未定义的方法即使方法已定义也会出错

问题描述

当我在特定方法结束后定义方法时,我得到一个 no method - method undefined 错误。在此之前定义的方法有一个 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)>'

标签: ruby

解决方案


您必须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在另一个方法中声明方法,在主程序中是不可见的。


推荐阅读