Dans Ruby, puis-je limiter la quantité de forage vers le bas d'un objet ne lorsque s'affiche en irb ou lors de l'utilisation .inspect?
Question
J'écris une classe pour résoudre des puzzles de sudoku qui a des deux tableaux de dimensions qui contiennent des pointeurs vers Cells
que point derrière ces deux tableaux dimensions. Quelque chose comme ceci:
def class Sudoku
attr :rows, :columns, :blocks
def initialize
# build each of the rows, columns, and blocks with a 9x9 map of Cells
end
end
def class Cell
attr :value, :row, :column, :block
def initialize(row, column, block, value)
# set each pointer to its parent row, column and block etc
end
end
Le problème est que quand je fais quelque chose comme:
p = Puzzle.new
dans irb
, irb se fige. J'ai modifié une partie du code maintenant il ne donc pas faire cela, mais si je fais:
irb> p.rows
=> TONS OF SHIT GETS RETURNED
il émet des tonnes et des tonnes de pointeurs imbriqués et prend environ 20 secondes pour revenir à l'irb
rapide. Beaucoup de cela a à voir avec quelques indications infinies i.e.:.
p.rows[0][0].row[0].row[0].row[0]....
Je me demande donc s'il y a un moyen pour Ruby juste retourner une représentation peu profonde de ce tableau puisque tous ses pointeurs finissent pointant vers lui-même.
La solution
Redéfinir inspecter dans Puzzle et afficher uniquement ce que vous voulez.
Par exemple:
def inspect
"Puzzle with size #{rows.size}"
end