我有一个rspec测试:
it 'has a populated chessboard' do
expect(ChessBoard.new.populate_new_board).to eq [
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn'],
['pawn','pawn','pawn','pawn','pawn','pawn','pawn','pawn']]
end对于此代码:
class ChessBoard
def initialize
@board=Array.new(7){Array.new(7)}
end
def populate_new_board
(0..7).each do |row|
(0..7).each do |cell|
@board[row][cell]='pawn'
end
end
@board
end
end但我得到了:
1) least number of moves from x to y has a populated chessboard
Failure/Error: expect(ChessBoard.new.populate_new_board).to eq [
NoMethodError:
undefined method `[]=' for nil:NilClass
# ./code.rb:10:in `block (2 levels) in populate_new_board'
# ./code.rb:9:in `each'
# ./code.rb:9:in `block in populate_new_board'
# ./code.rb:8:in `each'
# ./code.rb:8:in `populate_new_board'
# ./code_spec.rb:12:in `block (2 levels) in <top (required)>'我怎么才能解决这个问题?
顺便说一下,每个空间中的棋子不是最终的结果,但这正是我现在想要的测试结果(然后我可以进一步修改它)。
发布于 2014-01-01 13:45:46
改为:
def populate_new_board
(0...7).each do |row|
(0...7).each do |cell|
@board[row][cell]='pawn'
end
end
@board
end发布于 2014-01-01 15:43:14
class ChessBoard
def populate_new_board
@board = [['pawn'] * 7] * 7
end
end发布于 2014-01-01 14:30:57
因为它表示您在范围内做了一个错误,但是强烈建议您减少索引范围的使用。您可以使用:each和:map方法来代替:
class ChessBoard
def initialize
@board = Array.new( 7 ){ Array.new( 7 ) }
end
def populate_new_board
@board.each {| row | row.map! {| _ | 'pawn' } }
end
end但我会使用更多的简单代码:
class ChessBoard
def populate_new_board
@board = Array.new( 7 ){Array.new( 7 ) { 'pawn' } }
end
endhttps://stackoverflow.com/questions/20869171
复制相似问题