Bonjour à tous,
J'ai un petit, peut-être un gros soucis, dans mon code. Bon, je code depuis très peu de temps en ruby. Et je n'ai le réflexe qui me dit, tiens comment je pourrais corriger ça dans ce cas.
J'ai ce message d'erreur 6 fois, pour mes 6 cas de tests en Rspec sur 9. Les 6 cas se ressemblant fortement puisqu'il s'agit de mes divers cas de grilles. Il ne semble pas reconnaître les opérateurs. C'est arrivé en voulant rajouter une condition après avoir "mappé" ma variable contenant mon tableau de position de cellules voisines. Car, j'avais avant ça une erreurFailure/Error: neighbours.map{ |e| neighbours_cells_values << @grid[cell_position + e[0]][line_position + e[1]] if @grid[cell_position + e[0]] >= 0} NoMethodError:
undefined method `>=' for [0, 0, 0]:Arraydonc sortant de ma grille, j'ai voulu ajouté une condition. Voici mon code. Ça cloche àundefined method `[]' for nil:NilClass
Code : Sélectionner tout - Visualiser dans une fenêtre à part neighbours_cells_values << neighbours.map{ |e| @grid[cell_position + e[0]][line_position + e[1]] if @grid[cell_position + e[0]] >= 0 }Une idée d'où vient le problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 class JeuDeLaVie EMPTY_GRID = [[0,0,0],[0,0,0],[0,0,0]] def initialize(grid = EMPTY_GRID) @grid = grid end def grid new_grid = @grid @grid.each_with_index do |line, line_position| line.each_with_index do |cell, cell_position| if cell == 0 alive_neighbours_cells = neighbours_cells(cell_position, line_position).select{ |e| alive?(e)} if alive_neighbours_cells == 3 new_grid[line_position][cell_position] = 1 end else alive_neighbours_cells = neighbours_cells(cell_position, line_position).select{ |e| alive?(e)} if alive_neighbours_cells.length < 2 || alive_neighbours_cells.length > 3 new_grid[line_position][cell_position] = 0 end end end end return new_grid end def neighbours_cells(cell_position, line_position) neighbours = [[-1,-1], [-1, 0], [-1,1], [0,1], [1,1], [1,0], [1,-1],[0,-1]] neighbours_cells_values = [] neighbours_cells_values << neighbours.map{ |e| @grid[cell_position + e[0]][line_position + e[1]] if @grid[cell_position + e[0]] >= 0 } end def alive?(cell_value) cell_value == 1 end end
Partager