Ruby:调用display方法时出现NoMethodError

时间:2014-07-24 06:57:02

标签: ruby

问候,我刚开始用这本名为Ruby的计​​算机科学编程基础的noob书开始学习Ruby。我已经练过每章的练习,没有太多的错误,但是我在上一章为tic-tac-toe游戏编写的课程中不断出现这个错误。这是我制作的board.rb类文件:

class Board
  BOARD_MAX_INDEX = 2
  EMPTY_POS = ' '

  def initialize(current_player)
    @current_player = current_player
    @board = Array.new(BOARD_MAX_INDEX + 1) {
      Array.new(BOARD_MAX_INDEX + 1) { EMPTY_POS }
    }
  end
end

def display
  puts "+------+"
  for row in 0..BOARD_MAX_INDEX
    print "| "
    for col in 0..BOARD_MAX_INDEX
      s = @board[row][col]
      if s == EMPTY_POS
        print col + (row * 3) + 1
      else
        print s
      end
      print " | "
    end
    puts "\n+------+"
  end
end     

该类运行正常,但这是我尝试访问时irb中的错误消息 显示方法调用:

irb(main):004:0> require '/home/nick/board.rb'
=> true
irb(main):005:0> puts "Starting tic-tac-toe..."
Starting tic-tac-toe...
=> nil
irb(main):006:0> players = ['X', 'O']
=> ["X", "O"]
irb(main):007:0> current_player = players[rand(2)]
=> "O"
irb(main):008:0> b = Board.new(current_player)
=> #<Board:0x00000001c64868 @current_player="O", @board=[[" ", " ", " "], [" ", " ", "  "], [" ", " ", " "]]>
irb(main):009:0> b.display()
NoMethodError: private method `display' called for #<Board:0x00000001c64868>
from (irb):9
from /usr/bin/irb:12:in `<main>'

为什么我收到此错误,我需要做些什么才能让它显示电路板?

1 个答案:

答案 0 :(得分:3)

您应该将display方法的定义放在类中:

end # of class

def display
...
end

应该是:

  def display
  ...
  end

end # of class

希望它有所帮助。