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

Project1

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

[已经解决] 脚本中的self方法不能覆盖重写吗?

[复制链接]

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

跳转到指定楼层
1
发表于 2013-9-7 14:42:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 喵呜喵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”堆栈过深

请问应该如何覆盖重写这些方法才不会出错?

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

2
发表于 2013-9-7 14:49:05 | 只看该作者
本帖最后由 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
复制代码

评分

参与人数 1星屑 +45 收起 理由
喵呜喵5 + 45 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

无节操

梦石
0
星屑
607
在线时间
795 小时
注册时间
2009-2-6
帖子
3939

开拓者贵宾

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

点评

moy
一开始没注意到沙发被认可了,看到我就不回帖了233  发表于 2013-9-9 21:00
moy
哦~那我没理解对问题所在~不过反正都解决了,无所谓了w  发表于 2013-9-9 20:59
啊,主楼确实忘打def了,不过只是帖子编辑时忘打了  发表于 2013-9-9 20:53
moy
module中是否是必须以self.xxx定义方法我也没有接触过,但看你主楼的。。起码你把def忘了  发表于 2013-9-9 20:21
Brandnew day, Brandnew Life
                              实在  中
暂为素材区版主,版其  琢磨
应援一下~
RPG制作大师授权素材推广计划
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

4
 楼主| 发表于 2013-9-9 20:32:34 手机端发表。 | 只看该作者
moy 发表于 2013-9-9 20:20
self 是个缩写(专业名词俺不会装逼…),指代的是本类的一个实例
通常你会看到各种self.xxx ,其实就是针对 ...

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

def self.abc

end

不是

def abc

end
def efg
self.abc
end

点评

6rp
这两个地方的self实际上是不一样的。上面的是类,下面的是实例。所以调用不到它。  发表于 2013-9-9 20:44
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
135 小时
注册时间
2013-6-10
帖子
29
5
发表于 2013-9-10 00:02:19 | 只看该作者
本帖最后由 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”的問題。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

6
 楼主| 发表于 2013-9-10 00:30:43 | 只看该作者
xTsukihime 发表于 2013-9-10 00:02
Sion 寫的也可以寫成我沒有看到“Stack Level Too Deep”的問題。

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

顺便你的昵称看的我瞬间一震wwww
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 23:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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