В Ruby можно ли ограничить количество сверления на объекте, который отображает себя в IRB или при использовании .inspect?
Вопрос
Я пишу класс для решения головоломок судоку, у которых есть несколько двухмерных массивов, которые содержат указатели на 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