Rubyでは、IRBで表示するとき、または.spectを使用している場合、オブジェクトの掘削量を制限することはできますか?

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

  •  29-09-2019
  •  | 
  •  

質問

私は、ポインターを含む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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top