في روبي ، هل يمكنني تقييد كمية الحفر أسفل كائن عند عرض نفسه في IRB أو عند استخدام .inspect؟
سؤال
أنا أكتب فصلًا لحل ألغاز Sudoku التي لديها بعض المصفوفات ثنائية الأبعاد تحتوي على مؤشرات ل 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]....
لذلك أنا أتساءل عما إذا كانت هناك طريقة لروبي لإعادة تمثيل ضحل لهذه الصفيف لأن جميع مؤشراتها تنتهي في نهاية المطاف إلى أن يعود إلى نفسها.
المحلول
إعادة تعريف الفحص في اللغز وعرض فقط ما تريد.
فمثلا:
def inspect
"Puzzle with size #{rows.size}"
end
لا تنتمي إلى StackOverflow