查看: 2086|回复: 15

alias重定义了怎么办……

  [复制链接]

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
回帖
672
发表于 2009-3-30 19:36:22 | 显示全部楼层 |阅读模式

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

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

×
好像战斗中会随机的出现stack level too deep
这样的错误……

ms是alias多次定义一个函数的问题么?
该怎么办呢……
此贴于 2009-4-3 12:39:26 被版主darkten提醒,请楼主看到后对本贴做出回应。
版务信息:本贴由楼主自主结贴~

PC/IOS/Android共享的RM RPG:未名大学

神隐的主犯

梦石
0
星屑
553
在线时间
271 小时
注册时间
2008-2-22
回帖
7534

贵宾

发表于 2009-3-30 20:27:58 | 显示全部楼层
自己把那些同名方法整合在一起,不使用 alias 即可

《天空之城 —— 破碎的命运》
回复

使用道具 举报

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
回帖
672
 楼主| 发表于 2009-3-30 21:25:05 | 显示全部楼层
呃不太懂…
比如两个脚本里面有:alias 函数A 函数C和alias 函数B 函数C…这样的话应该改哪个呢…?

PC/IOS/Android共享的RM RPG:未名大学
回复

使用道具 举报

神隐的主犯

梦石
0
星屑
553
在线时间
271 小时
注册时间
2008-2-22
回帖
7534

贵宾

发表于 2009-3-30 21:39:07 | 显示全部楼层
语法:

alias 新方法名 旧方法名

给方法或全局变量添加别名。可以给方法名指定一个标识符或 Symbol(不能写 obj.method 这样的表达式)。 alias 的参数不会被计算。

给方法添加别名时,别名方法将继承此刻的原始方法。此后,即使原始方法被重新定义,别名方法仍然保持着重定义前的老方法的特性。若您改变了某方法的内容后,又想使用修改前的方法时,别名会非常有用

F1 是这么说的。

旧的方法相当于就与之前的方法定义。

比如
   class A
      def abc
        @a = 1
      end
   end
   class A
      alias old_abc abc
      def abc
        old_abc
        @a += 1
      end
   end

这里的 alias old_abc abc 中的 old_abc 就是之前的方法。

整合的话,就变成
   class A
      def abc
        @a = 1
        @a += 1
      end
   end

这个样子了。

因为每调用一次 alias 的话,都会先把方法地址压栈,所以多调用 alias 的话,堆栈就容易溢出了。(这个是个人理解,可能有误,不过原因大概是这个)

就是这样的喵~~~~~~{/hx}

《天空之城 —— 破碎的命运》
回复

使用道具 举报

梦石
0
星屑
50
在线时间
2 小时
注册时间
2007-9-4
回帖
230
发表于 2009-6-12 08:00:00 | 显示全部楼层
这个错误原因是由于循环次数过多导致的,与alias无关,请检查是不是程序中有死循环
偶尔出现说明死循环可能和某个条件分歧有关
[fly][/fly]
回复

使用道具 举报

神隐的主犯

梦石
0
星屑
553
在线时间
271 小时
注册时间
2008-2-22
回帖
7534

贵宾

发表于 2009-3-31 03:02:38 | 显示全部楼层
以下引用新月の道化师于2009-3-30 19:02:00的发言:

这个错误原因是由于循环次数过多导致的,与alias无关,请检查是不是程序中有死循环
偶尔出现说明死循环可能和某个条件分歧有关


循环貌似不占用堆栈的吧?




另外,Scene 类里都有一个死循环的说。。。

《天空之城 —— 破碎的命运》
回复

使用道具 举报

梦石
0
星屑
50
在线时间
2 小时
注册时间
2007-9-4
回帖
230
发表于 2009-3-31 07:03:16 | 显示全部楼层
以下引用火焰猫燐于2009-3-30 19:02:38的发言:
<BR><SCRIPT language="javascript">
   
strCont="[quote]以下引用新月の道化师于2009-3-30 19:02:00的发言:\r\n\r\n这个错误原因是由于循环次数过多导致的,与alias无关,请检查是不是程序中有死循环\r\n偶尔出现说明死循环可能和某个条件分歧有关 \r\n
\r\n\r\n循环貌似不占用堆栈的吧?\r\n\r\n
\r\n\r\n另外,Scene 类里都有一个死循环的说。。。";
document.write(ubb.spbShowTopic(strCont,1));
//-->
</SCRIPT><BLOCKQUOTE class="CodeBorder">以下引用新月の道化师于2009-3-30 19:02:00的发言:<BR>
<BR>
这个错误原因是由于循环次数过多导致的,与alias无关,请检查是不是程序中有死循环<BR>
偶尔出现说明死循环可能和某个条件分歧有关 <BR>
</BLOCKQUOTE><BR>
<BR>
循环貌似不占用堆栈的吧?<BR>
<BR>
<HR noshade="" size="1" color="#dddddd"><BR>
<BR>
另外,Scene 类里都有一个死循环的说。。。

<BR><BR><FONT color="red">[本贴由作者于 2009-3-30 19:15:04 最后编辑]</FONT>
[/quote]
scene的loop是可以通过break跳出的
偶表达错了,偶是说方法的递归调用无法跳出时。。。
$abc = 0
class Test
  def meth1
    $abc += 2
    meth2
  end
  def meth2
    $abc += 2
    meth1
  end
end

a = Test.new
a.meth1
[fly][/fly]
回复

使用道具 举报

神隐的主犯

梦石
0
星屑
553
在线时间
271 小时
注册时间
2008-2-22
回帖
7534

贵宾

发表于 2009-3-31 07:05:52 | 显示全部楼层
递归 和 alias 都是一样要使用堆栈,所以~~~~

《天空之城 —— 破碎的命运》
回复

使用道具 举报

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
回帖
672
 楼主| 发表于 2009-3-31 07:27:50 | 显示全部楼层
我先把alias都整合了……看看会不会还出问题……

话说现在才反应过来,alias只是为了写程序方便么= =

PC/IOS/Android共享的RM RPG:未名大学
回复

使用道具 举报

梦石
0
星屑
50
在线时间
2 小时
注册时间
2007-9-4
回帖
230
发表于 2009-4-1 02:24:01 | 显示全部楼层
以下引用火焰猫燐于2009-3-30 23:05:52的发言:
<BR><SCRIPT language="javascript">
   
strCont="递归 和 alias 都是一样要使用堆栈,所以~~~~";
document.write(ubb.spbShowTopic(strCont,1));
//-->
</SCRIPT>递归 和 alias 都是一样要使用堆栈,所以~~~~

唔,不明白咩,为虾米使用alias会出现堆栈问题?
偶一般都是自己独立写脚本用alias的机会不多不熟悉
[fly][/fly]
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部