Project1

标题: 脚本中的self方法不能覆盖重写吗? [打印本页]

作者: 喵呜喵5    时间: 2013-9-7 14:42
标题: 脚本中的self方法不能覆盖重写吗?
本帖最后由 喵呜喵5 于 2013-9-9 20:55 编辑

比如说,我想要修改

module BattleManager

中的self.gain_gold,于是在脚本的最后新建了一个脚本,内容为
  1. module BattleManager
  2.   def self.gain_gold
  3.     p "hello world"
  4.   end
  5. end
复制代码
实际运行游戏的时候却会报错“Stack Level Too Deep”堆栈过深

请问应该如何覆盖重写这些方法才不会出错?
作者: Sion    时间: 2013-9-7 14:49
本帖最后由 Sion 于 2013-9-7 14:51 编辑

你是不是在方法里又调用这个方法了。
alias 的话 用 class << BattleManager 里面的方法就是模块公共方法,不用写 self,可以像普通方法一样覆盖。
  1. class << BattleManager
  2.   alias_method :gain_gold_123345, :gain_gold
  3.   def gain_gold
  4.     gain_gold_123345
  5.   
  6.   end
  7. end
复制代码

作者: moy    时间: 2013-9-9 20:20
self 是个缩写(专业名词俺不会装逼…),指代的是本类的一个实例
通常你会看到各种self.xxx ,其实就是针对一个本类的实例,调用本类中的xxx方法。而不是什么定义或者别的操作。定义一个方法,必须要“def”,这个省不得……
作者: 喵呜喵5    时间: 2013-9-9 20:32
moy 发表于 2013-9-9 20:20
self 是个缩写(专业名词俺不会装逼…),指代的是本类的一个实例
通常你会看到各种self.xxx ,其实就是针对 ...

嗯,谢谢,不过我问的其实是

def self.abc

end

不是

def abc

end
def efg
self.abc
end
作者: xTsukihime    时间: 2013-9-10 00:02
本帖最后由 xTsukihime 于 2013-9-10 00:03 编辑
喵呜喵5 发表于 2013-9-9 20:32
嗯,谢谢,不过我问的其实是

def self.abc


Sion 寫的

  1. class << BattleManager
  2.   alias_method :gain_gold_123345, :gain_gold
  3.   def gain_gold
  4.     gain_gold_123345
  5.   
  6.   end
  7. end
复制代码
也可以寫成

  1. module BattleManager

  2.   class << self
  3.     alias_method :gain_gold_123345, :gain_gold
  4.   end

  5.   def self.gain_gold
  6.     gain_gold_123345
  7.   end
  8. end
复制代码
我沒有看到“Stack Level Too Deep”的問題。
作者: 喵呜喵5    时间: 2013-9-10 00:30
xTsukihime 发表于 2013-9-10 00:02
Sion 寫的也可以寫成我沒有看到“Stack Level Too Deep”的問題。

谢谢,堆栈过深我是在没用<<直接覆盖时才发生的

顺便你的昵称看的我瞬间一震wwww




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1