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

Rubyは、オブジェクトをpに渡すと、オブジェクトのinspectメソッドの戻り値を出力します。クラスのinspectをオーバーライドして、役立つ情報のみを含む文字列を返すようにすることができます。

例えば:

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 に答える