In Ruby, posso limitare la quantità di drill-down di un oggetto non durante la visualizzazione di se stesso in IRB o quando si utilizza .inspect?

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

  •  29-09-2019
  •  | 
  •  

Domanda

Sto scrivendo una classe per risolvere i puzzle di Sudoku che ha circa due array bidimensionali che contengono puntatori a Cells che puntano a questi due array bidimensionali. Qualcosa di simile a questo:

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

Il problema è che quando faccio qualcosa di simile:

p = Puzzle.new

in irb, IRB si blocca. Ho modificato una parte del codice ora in modo che non lo fa, ma ora se faccio:

irb> p.rows
=> TONS OF SHIT GETS RETURNED

emette tonnellate e tonnellate di puntatori nidificati e impiega circa 20 secondi per tornare al prompt di irb. Un sacco di questo ha a che fare con alcuni infinite puntatori cioè:.

p.rows[0][0].row[0].row[0].row[0]....

Quindi mi chiedo se c'è un modo per Ruby per tornare solo una rappresentazione superficiale di questa matrice in quanto tutti i suoi puntatori finiscono che punta a se stesso.

È stato utile?

Soluzione

Ridefinisci ispezionare in Puzzle e visualizzare solo quello che vuoi.

Ad esempio:

def inspect
  "Puzzle with size #{rows.size}"
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top