Project1

标题: 请问:为什么能用而不导致死循环 [打印本页]

作者: kvkv97    时间: 2021-3-8 15:26
标题: 请问:为什么能用而不导致死循环
  #--------------------------------------------------------------------------
  # ● 公共事件
  #--------------------------------------------------------------------------
  def command_117
    # 获取公共事件
    common_event = $data_common_events[@parameters[0]]
    # 公共事件有效的情况下
    if common_event != nil
      # 生成子解释器
      @child_interpreter = Interpreter.new(@depth + 1)
      @child_interpreter.setup(common_event.list, @event_id)
    end
    # 继续
    return true
  end

在上面 ,@child_interpreter = Interpreter.new(@depth + 1)
为什么在本类的方法update中,@child_interpreter.update
这样不是形成死循环吗?为什么还能用?怎么不报错“stack level too deep”?
作者: soulsaga    时间: 2021-3-8 15:53
本帖最后由 soulsaga 于 2021-3-8 16:08 编辑

update不会造成死循环?
作者: enghao_lim    时间: 2021-3-8 16:43
首先,并没有构成死循环,这是递进。其次,脚本有检查最多100级。
  1.     # 深度超过 100 级
  2.     if depth > 100
  3.       print("调用公用事件超过了限制。")
  4.       exit
  5.     end
复制代码

这里给个真死循环案例:公共事件1里头执行公共事件2,公共事件2里头执行公共事件1,这样就会陷入死循环然后因为超过100级而弹出警告并退出。
作者: RPGzh500223    时间: 2021-3-9 10:51
网上随便看的,没学过,用词什么的多包涵
def update 这是个实例的方法
通常事件解释器
地图:$game_system.map_interpreter
战斗:$game_system.battle_interpreter
都是Interpreter的实例
而@child_interpreter = Interpreter.new(@depth + 1)是又生成个实例
实例之间又互不干扰





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1