赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 21598 |
最后登录 | 2017-9-25 |
在线时间 | 448 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 448 小时
- 注册时间
- 2011-10-9
- 帖子
- 184
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 冷徹心扉 于 2012-12-4 14:22 编辑
錯誤訊息為:
SystemStackError .
stack level too deep
這是人物升級素質顯示視窗,錯誤發生在F12重啟後
在魔劍工鋪找到了解決方式,原文連結
--------------------------------------------------------------------------------------------------------------------------------------
stack level too deep
可能是無限循環呼叫同個方法時發生
通常發生這個情況比較多都是用保留字「alias」重定義內部的方法名稱後
按下F12鍵重新開始時觸發的情況較多,由於F12重新只重置腳本編輯器定義的內容
內部已經被修改的定義不會重置(全局變量也不重置),導致執行「alias」2次而發生!!
要避免這種事情的發生,可以善用全局變量也不重置的特性,用條件分歧判斷是否執行
(這也是為什麼有些腳本有F12除錯標誌的原因)
class Sword
def a
a
end
end
Sword.new.aclass Array # 數組類(內部)
alias sword_clear clear
def clear
sword_clear # 按下F12執行這個方法後會出錯
end
end
解決方法
class Array
alias sword_clear clear if $ass == nil # 如果$ass是nil(默認值)就執行
def clear
sword_clear
end
end
$ass = true # 將$ass改為true,防止F12重新時又再次被「alias」重定義
--------------------------------------------------------------------------------------------------------------------------------
原腳本出錯部分- alias :eds_old_dispose :dispose
- def dispose
- eds_old_dispose #<------------------------------------此行報錯
- @title_window.dispose
- @title_sprite.dispose
- end
- end
复制代码 我改成這樣後,暫時是測試正常了,但還是有點疙瘩在
請問這樣算不算解決無限循環問題了呢?- alias :eds_old_dispose :dispose if $ass == nil #自行追加部分
- def dispose
- eds_old_dispose
- @title_window.dispose
- @title_sprite.dispose
- end
- end
- $ass = true #自行追加部分
复制代码 |
|