使用attr_accessor使用代码获取NameError

时间:2015-06-21 08:47:57

标签: ruby inheritance attr-accessor

这是用于从特定位置的国际象棋游戏中的每个棋子生成移动的代码。

class Characters
    def initialize(behaviours)
        @position=behaviours.fetch(:assigning_position)
        @right=behaviours.fetch(:moving_right)

    end
    def perform_position
        @position.kmoves
    end
    def perform_right
        @right.rightmove
    end
  end

这是为特定棋子指定位置的方法。

class Position
    def kmoves
        print "enter x value"
        xpos=STDIN.gets.chomp
        print "enter y value"
        ypos=STDIN.gets.chomp
        print "#{xpos}, #{ypos}\n"
    end
end

这是将棋子向右移动一个位置的方法

class Right_move < Position
    def rightmove
        puts "compute right moves"
        xpos+=1
    end
end

king = Characters.new( assigning_position:Position.new,moving_right:Right_move.new)
king.perform_position
king.perform_right

我收到错误:

  <{1}} xpos'中的

#(NameError)

1 个答案:

答案 0 :(得分:0)

您似乎已将Characters类中的attr_accessors包含在Position类中,而不是class Position attr_accessor :xpos, :ypos def kmoves print "enter x value" xpos = STDIN.gets.chomp print "enter y value" ypos = STDIN.gets.chomp print "#{xpos}, #{ypos}\n" end end 类。您放置结肠时也会出现拼写错误。试试这个:

Characters

此外,您可能希望将Character课程重命名为player,因为它似乎代表个别角色而非其集合。