以下引用新月の道化师于2009-3-30 19:02:00的发言:
这个错误原因是由于循环次数过多导致的,与alias无关,请检查是不是程序中有死循环
偶尔出现说明死循环可能和某个条件分歧有关
以下引用火焰猫燐于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
以下引用火焰猫燐于2009-3-30 23:05:52的发言:
<BR><SCRIPT language="javascript">
strCont="递归 和 alias 都是一样要使用堆栈,所以~~~~";
document.write(ubb.spbShowTopic(strCont,1));
//-->
</SCRIPT>递归 和 alias 都是一样要使用堆栈,所以~~~~
以下引用火焰猫燐于2009-3-31 18:32:10的发言:
<BR><SCRIPT language="javascript">
strCont="alias 在重定义方法的时候要先将就方法的地址入栈的说。";
document.write(ubb.spbShowTopic(strCont,1));
//-->
</SCRIPT>alias 在重定义方法的时候要先将就方法的地址入栈的说。
以下引用紫苏于2009-4-1 10:42:58的发言:
程序运行时,函数代码是保存在进程地址空间的代码段中的,alias 的作用就是将函数复制一份到代码段,或是将全局变量复制一份到数据段中,只不过别名函数复制的是值,而别名全局变量仅仅复制地址~
在程序执行到调用某函数的时候才会操作栈内存,这时会将函数的返回地址和参数信息压入栈中(也就是汇编中的 push 指令),然后执行子程序,函数返回时获取并跳转到之前在栈中保存的返回地址继续执行
所以栈溢出的异常和 alias 复制了多少次函数没有关系,可以做一个测试,程序自动生成几万行 alias xx xx,符号各不相同,看看是否会产生栈溢出就知道了~
有些语言支持在栈上分配内存,比如 c++ 在栈上分配数组,如果数组长度超过了一定限度就会产生溢出……但 Ruby 的数组是堆中动态分配的对象,所以 Ruby 中 stack level too deep 这个异常多半是由于函数嵌套调用或者递归层次太深引起的,就像新月上面说的那样
############## 原 RGSS 脚本 ##############
class Scene_Battle #
def start_phase5 #
# 原来的 start_phase5 #
# ... #
end #
end #
##########################################
############## 插件脚本 1 ################
class Scene_Battle #
alias xrxs26_start_phase5 start_phase5 #
def start_phase5 #
# ... #
xrxs26_start_phase5 #
end #
end #
##########################################
############## 插件脚本 2 ################
class Scene_Battle #
alias xrxs26_start_phase5 start_phase5 #
def start_phase5 #
# ... #
xrxs26_start_phase5 #
end #
end #
##########################################
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |