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

Project1

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

[已经解决] 關於stack level too deep的「alias」問題,自問自答求驗證

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
448 小时
注册时间
2011-10-9
帖子
184
跳转到指定楼层
1
发表于 2012-12-3 01:26:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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」重定義
--------------------------------------------------------------------------------------------------------------------------------



原腳本出錯部分
  1.   alias :eds_old_dispose :dispose
  2.   def dispose   
  3.     eds_old_dispose #<------------------------------------此行報錯
  4.     @title_window.dispose
  5.     @title_sprite.dispose
  6.   end
  7. end
复制代码
我改成這樣後,暫時是測試正常了,但還是有點疙瘩在
請問這樣算不算解決無限循環問題了呢?
  1. alias :eds_old_dispose :dispose if $ass == nil    #自行追加部分
  2.   def dispose   
  3.     eds_old_dispose
  4.     @title_window.dispose
  5.     @title_sprite.dispose
  6.   end
  7. end
  8. $ass = true  #自行追加部分
复制代码
头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

2
发表于 2012-12-3 07:35:38 手机端发表。 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 05:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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