В Ruby можно ли ограничить количество сверления на объекте, который отображает себя в IRB или при использовании .inspect?

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

  •  29-09-2019
  •  | 
  •  

Вопрос

Я пишу класс для решения головоломок судоку, у которых есть несколько двухмерных массивов, которые содержат указатели на Cells Это укажите назад к этим двумерным массивам. Что-то вроде этого:

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