0

我有下面的代码,其中在需要之后返回动作类

机器人类

attr_accessor :action

    def initialize 
        @action = Actions.new
    end

    def left
        @action.left
    end

现在 Action 类使用Direction::Move.new在初始化方法下定义的实例。

动作类

def place(x_coordinate, y_coordinate, direction = :north)
        @x_coordinate = x_coordinate
        @y_coordinate = y_coordinate
        @direction = direction
        @report.log_position(x_coordinate, y_coordinate, direction) if

        x_coordinate.between?(@board.left_limit, @board.right_limit) && 
        y_coordinate.between?(@board.bottom_limit, @board.top_limit) &&
        @move.directions.grep(direction).present?
    end

    def left
        @move.left(direction)
    end

我现在已经用 place 方法定义了 Actions 类,所以方向被分配给attr_accessor然后robot.left被调用

describe '#left' do
        it 'should turn left' do
            action.place(0, 0, Direction::North)
            expect(robot.left).to eq(Direction::West)
        end
    end

但是当我做 Rspec 测试时,它返回以下错误:

RSpec: no implicit conversion from nil to integer

为什么robot.left调用action.left不允许direction传递给此action.left方法?

4

1 回答 1

0

我能想到的最直接的解释是,action您的示例中引用的变量指的是一个实例,Actions而不是由robot. 如果您创建 aRobot并且不调用place的关联实例Actions,那么当robot.left调用@action.left,@direction在该实例中将未定义Actions,因此访问器direction将返回nil,从而导致错误。

您能否分享spec与如何定义robotaction定义相关的文件的其余部分?

于 2013-08-26T04:53:44.897 回答