设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2925|回复: 5
打印 上一主题 下一主题

[已经过期] 请问:为什么能用而不导致死循环

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4169
在线时间
258 小时
注册时间
2013-10-13
帖子
815
跳转到指定楼层
1
发表于 2021-3-8 15:26:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
  #--------------------------------------------------------------------------
  # ● 公共事件
  #--------------------------------------------------------------------------
  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”?

Lv5.捕梦者

梦石
0
星屑
36382
在线时间
10788 小时
注册时间
2009-3-15
帖子
4813
2
发表于 2021-3-8 15:53:57 | 只看该作者
本帖最后由 soulsaga 于 2021-3-8 16:08 编辑

update不会造成死循环?

点评

@child_interpreter = Interpreter.new(@depth + 1)是解释器类,又在类中的update使用  发表于 2021-3-10 15:10
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7981
在线时间
1183 小时
注册时间
2007-7-29
帖子
2055
3
发表于 2021-3-8 16:43:08 | 只看该作者
首先,并没有构成死循环,这是递进。其次,脚本有检查最多100级。
  1.     # 深度超过 100 级
  2.     if depth > 100
  3.       print("调用公用事件超过了限制。")
  4.       exit
  5.     end
复制代码

这里给个真死循环案例:公共事件1里头执行公共事件2,公共事件2里头执行公共事件1,这样就会陷入死循环然后因为超过100级而弹出警告并退出。

点评

反复套娃100次  发表于 2021-3-8 20:02

评分

参与人数 1星屑 +20 收起 理由
RyanBern + 20 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
4
发表于 2021-3-9 10:51:50 | 只看该作者
网上随便看的,没学过,用词什么的多包涵
def update 这是个实例的方法
通常事件解释器
地图:$game_system.map_interpreter
战斗:$game_system.battle_interpreter
都是Interpreter的实例
而@child_interpreter = Interpreter.new(@depth + 1)是又生成个实例
实例之间又互不干扰
回复 支持 0 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-14 13:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表