Rubyでは、IRBで表示するとき、または.spectを使用している場合、オブジェクトの掘削量を制限することはできますか?
質問
私は、ポインターを含む2つの次元配列を持つ数独パズルを解くためのクラスを書いています Cells
そのポイントは、これらの2つの次元配列に戻ります。このようなもの:
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
問題は、私が次のようなことをするときです。
p = Puzzle.new
の irb
, 、IRBはフリーズします。私は今、いくつかのコードを変更したので、それはそうしませんが、今はそうするなら:
irb> p.rows
=> TONS OF SHIT GETS RETURNED
ネストされたポインターのトンとトンを出力し、に約20秒かかります irb
促す。これの多くは、いくつかの無限のポインターに関係しています。
p.rows[0][0].row[0].row[0].row[0]....
だから、Rubyがこの配列の浅い表現を返すだけで、そのすべてのポインターがそれ自体に戻ることになっているのではないかと思っています。
解決
パズルで検査を再定義し、必要なもののみを表示します。
例えば:
def inspect
"Puzzle with size #{rows.size}"
end
所属していません StackOverflow