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?

StackOverflow https://stackoverflow.com/questions/4099651

  •  29-09-2019
  •  | 
  •  

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.

Était-ce utile?

La solution

Redéfinir inspecter dans Puzzle et afficher uniquement ce que vous voulez.

Par exemple:

def inspect
  "Puzzle with size #{rows.size}"
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top