我在下面的代码中,在需要
之后返回了动作类机器人类
attr_accessor :action
def initialize
@action = Actions.new
end
def left
@action.left
end
现在,Action类使用{initial}方法下定义的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
的{{1}}不允许将action.left
传递给此direction
方法?
答案 0 :(得分:0)
我能想到的最直接的解释是,示例中引用的action
变量引用的Actions
实例不是robot
创建的实例。如果您在Robot
的关联实例上创建了place
但未拨打Actions
,那么当robot.left
调用@action.left
时,@direction
将会在Actions
实例中未定义,因此访问者direction
将返回nil
,这会导致错误。
您可以分享与spec
和robot
定义方式相关的action
文件的剩余部分吗?