0

私は Ruby の専門家ではありませんが、いくつかのスクリプトで問題を追跡しようとしていますが、この特定のスクリプトの専門家に連絡して、このエラーが発生した理由を理解することができませんでした。この特定の関数に絞り込みましたが、私が知る限り、最初の print ステートメントは発生しますが、end print ステートメントは発生しません。スタック レベルが深すぎるというエラーは、この関数が以下のように正確に存在する場合にのみ発生します。

def load_power_ports(io_info)
  return if !io_info
  io_info.each_key do |key|
    print key
    if !@power_controllers[key.to_s.downcase]
      @power_controllers[key.to_s.downcase] = Object.const_get($equipment_table['power_controller'][key.to_s.downcase][0].driver_class_name).new($equipment_table['power_controller'][key.to_s.downcase][0])
    end
  end
  print "end of equipment power block"
rescue Exception => e
  raise e.to_s + "\nUnable to create power controller: " + io_info.to_s
end

printステートメントは、どの情報が渡されているか、プログラムがどこまで到達しているか、反復が実行されているかを確認するためだけのものです。

4

1 に答える 1

1

のコンストラクターは直接または間接的にdriver_class_name呼び出しますか? load_power_portsもしそうなら、スタックオーバーフローを引き起こす無限の再帰が発生することになります(皮肉です)。それは、あなたがその問題を抱えている可能性が高い唯一の場所です。

于 2013-03-28T01:38:17.100 に答える