查看: 2157|回复: 3

[已经解决] 【语法问题】关于alias和ruby stack level too deep

[复制链接]
梦石
24
星屑
8942
在线时间
248 小时
注册时间
2020-12-4
回帖
259

极短24获奖极短23获奖极短22获奖

发表于 2022-6-22 16:21:34 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 纯属小虫 于 2022-6-22 16:27 编辑

最近在给自己的工程打各种补丁mod
于是写了很多附加型的脚本
用了很多alias来修改已有的定义

今天编写测试的时候遇见了这样一个错误
ruby stack level too deep

筛选了BUG之后,发现问题出在alias上
我在同样class中
出现了两个一样的
   alias B_old  B
       def B
           B_old
           other_code
        end


当我把两个定义的  B_old 其中一个变成另一个名字  B_old_x
这个问题就消失了

我原以为的 alias 是把脚本前文出现的这个定义换掉一个名字
但现在看来,好像是我理解出错了


下面放一个错误范例:
[pre lang="ruby"]def name
  p "你好"
end

alias name_old name
def name
  name_old
  p "你好"
end

alias name_old name
def name
  name_old
  p "你好"
end

name

>>>>>>> ruby stack level too deep[/pre]

有大佬可以详细说一说 alias 的正确用法以及运行原理吗?

或者科普一下,那些会修改之前已有定义的,mod补丁型脚本应该怎么写比较规范,不容易出BUG~~
梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2022-6-22 17:17:04 | 显示全部楼层
本帖最后由 guoxiaomi 于 2022-6-22 17:19 编辑

简单地说就是不要重复使用相同的 alias。。。

评分

参与人数 2星屑 +50 赞 +1 收起 理由
RyanBern + 50 认可答案
纯属小虫 + 1 塞糖

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
24
星屑
8942
在线时间
248 小时
注册时间
2020-12-4
回帖
259

极短24获奖极短23获奖极短22获奖

 楼主| 发表于 2022-6-22 17:21:11 | 显示全部楼层
guoxiaomi 发表于 2022-6-22 17:17
简单地说就是不要重复使用相同的 alias。。。


看来有必要把每个mod里的alias用一个独特的名字了
之前一直以为是覆盖前者...现在想想太天真了

点评

可以参照tarxod的core插件写def_before / def_after:https://github.com/taroxd/RGSS/blob/master/rgss3/taroxd_core.rb  发表于 2022-6-22 18:59
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部