0

所以我有一个“堆栈级别太深”的错误,我很确定我知道是什么原因造成的。我正在开发一个基于图块的游戏,并且我拥有所有图块,并且为了方便(每次我需要使用寻路时省去查找它),每个图块都有一个包含 8 个邻居的“附近”数组。

但是,当我去打印一些对象进行调试时,我经常遇到“堆栈级别太深”的错误。我认为这是因为每个图块在“附近”数组中都有相邻的图块,然后它们引用原始图块,在尝试打印所有对象时创建一个循环。

我可以忍受这个,但如果我能把蛋糕也吃掉就更好了。我可以通过 id 或坐标引用图块来避免它,而不是直接引用对象。缺点是这意味着每次都要搜索对象。

那么,有没有办法维护我当前的代码,但防止“附近”数组在输出中打印,以便它正常停止?

希望这很清楚!当前代码:

class Tile
    attr_accessor :type, :x, :y, :z, :nearby, :t_id

    @type = 0

    @@count = 0

    def initialize(x, y, z, type)
        @x = x
        @y = y
        @z = z
        @t_id = @@count
        @@count += 1

        @nearby = [] 

        @type = type
    end
end
4

1 回答 1

1

当您将对象传递给p时,Ruby 会打印出对象的检查方法的返回值。您可以在您的类上覆盖检查,使其返回一个字符串,其中仅包含对您有用的信息。

例如:

class A
  def inspect
    "printing an instance of A"
  end
end

打印时:

irb> a = A.new    
irb> p a    
printing an instance of A
于 2012-08-27T13:36:42.043 回答