En Ruby, puedo limitar la cantidad de la perforación hasta un objeto no cuando se muestra en sí IRB o cuando se utiliza .inspect?
Pregunta
Estoy escribiendo una clase para resolver sudokus que tiene algunas matrices bidimensionales que contienen punteros a Cells
que volver a punto de estas matrices de dos dimensiones. Algo como esto:
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
El problema es que cuando hago algo como:
p = Puzzle.new
en irb
, IRB se congela. He modificado una parte del código por lo que ahora no hace eso, pero ahora si lo hago:
irb> p.rows
=> TONS OF SHIT GETS RETURNED
emite toneladas y toneladas de punteros anidados y tarda unos 20 segundos para volver a la pronta irb
. Mucho de esto tiene que ver con algunos punteros es decir infinitas:.
p.rows[0][0].row[0].row[0].row[0]....
Así que estoy preguntando si hay una manera de que Ruby a sólo devuelve una representación superficial de esta matriz, ya que todos sus punteros terminan apuntando de nuevo a sí mismo.
Solución
Un nuevo concepto de inspeccionar en rompecabezas y mostrar sólo lo que quieres.
Por ejemplo:
def inspect
"Puzzle with size #{rows.size}"
end