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?

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

  •  29-09-2019
  •  | 
  •  

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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top