NoMethod - неопределенный методошибка, даже если метод был определен - PullRequest
0 голосов
/ 25 марта 2019

Я получаю сообщение об отсутствии метода - метод неопределен, когда я определяю метод ПОСЛЕ того, как конкретный метод заканчивается.У метода, определенного до этого, есть блок оператора 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 ]

3 голосов
/ 25 марта 2019

Вы должны закрыть свой метод 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 внутри другого метода, он не отображается в основной программе.

0 голосов
/ 25 марта 2019

ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...