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

Project1

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

[已经解决] 关于越级继承……

[复制链接]

Lv1.梦旅人

梦石
0
星屑
65
在线时间
433 小时
注册时间
2007-5-1
帖子
993
跳转到指定楼层
1
发表于 2010-11-7 16:29:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 DeathKing 于 2010-11-14 08:45 编辑

我们知道Window_Command(以下简称WC) < Window_Selectable(WS) < Window_Base(WB)。

如果在WC的update方法里使用super,将继承WS的update方法,又因为WS的update里又有super,所以最终WC的update会继承WB和WS的update,问题是:我现在只想让WC的update继承WB的update,忽视WS的update定义,有什么方法可以办到呢?

点评

喵,表示水镜是看了愚者那个关于类的伪教程么?  发表于 2010-11-7 18:58

嗯,不能浪费签名了,打广告。本人的悲剧作品:
坑化游戏《龙之影》      R剧《星空》     小游戏《剑与拳头》
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

2
发表于 2010-11-7 16:45:01 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
433 小时
注册时间
2007-5-1
帖子
993
3
 楼主| 发表于 2010-11-7 16:54:32 | 只看该作者
回复 沉影不器 的帖子

好方法!受教了,方法别名就应该这样用啊~

嗯,不能浪费签名了,打广告。本人的悲剧作品:
坑化游戏《龙之影》      R剧《星空》     小游戏《剑与拳头》
回复 支持 反对

使用道具 举报

Lv2.观梦者

旅之愚者

梦石
0
星屑
275
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

4
发表于 2010-11-7 18:57:36 | 只看该作者
沉影前辈的方法不错~愚者也来酱油一个~
在WS的update第一行插入:
if self.is_a?(Window_Command)
  super
return
end

点评

其实是忽然记起以前写脚本的时候遇到过这个问题,当时用某种方法顺利解决了,但是现在却记不起来了。67酱的方法也很好啊~  发表于 2010-11-7 20:00
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1035
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

5
发表于 2010-11-7 19:39:31 | 只看该作者
本帖最后由 禾西 于 2010-11-8 01:25 编辑

class A
  def initialize
    @a = 10
  end
  def meth1
    p @a
  end
end
class B < A
  def meth1
    @a += 1
    super
  end
end
class C < B
  def meth1
    @a += 2
    self.class.superclass.superclass.instance_method(:meth1).bind(self).call
  end
end
a = A.new
b = B.new
c = C.new
a.meth1 #=> 10
b.meth1 #=> 11
c.meth1 #=> 12

点评

禾西酱的方法好精辟,可惜我还不能完全看懂的说,回去恶补了……  发表于 2010-11-7 22:26

评分

参与人数 1星屑 +2 收起 理由
苏小脉 + 2

查看全部评分

不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1195
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

6
发表于 2010-11-14 08:47:46 | 只看该作者
回复 禾西 的帖子

就是想问问bind是什么类类提供的方法。运行了ri上关于 Class#instance_method 的示范,竟然出错。
  1. C:\Documents and Settings\DeathKing>irb
  2. irb(main):001:0>         class Interpreter
  3. irb(main):002:1>           def do_a() print "there, "; end
  4. irb(main):003:1>           def do_d() print "Hello ";  end
  5. irb(main):004:1>           def do_e() print "!\n";     end
  6. irb(main):005:1>           def do_v() print "Dave";    end
  7. irb(main):006:1>           Dispatcher = {
  8. irb(main):007:2*            ?a => instance_method(:do_a),
  9. irb(main):008:2*            ?d => instance_method(:do_d),
  10. irb(main):009:2*            ?e => instance_method(:do_e),
  11. irb(main):010:2*            ?v => instance_method(:do_v)
  12. irb(main):011:2>           }
  13. irb(main):012:1>           def interpret(string)
  14. irb(main):013:2>             string.each_byte {|b| Dispatcher[b].bind(self).call
  15. }
  16. irb(main):014:2>           end
  17. irb(main):015:1>         end
  18. => nil
  19. irb(main):016:0>
  20. irb(main):017:0*         interpreter = Interpreter.new
  21. => #<Interpreter:0xdccad0>
  22. irb(main):018:0>         interpreter.interpret('dave')
  23. NoMethodError: undefined method `bind' for nil:NilClass
  24.         from (irb):13:in `block in interpret'
  25.         from (irb):13:in `each_byte'
  26.         from (irb):13:in `interpret'
  27.         from (irb):18
  28.         from D:/Program/ruby/bin/irb.bat:20:in `<main>'
  29. irb(main):019:0>
复制代码

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1035
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

7
发表于 2010-11-14 09:18:50 | 只看该作者
method類
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
8
发表于 2010-11-14 09:46:52 | 只看该作者
bind 是 UnboundMethod 的方法;Method 对象在创建的时候就已经绑定(bound)了。

六楼出错的原因是因为键值没匹配上。在 Ruby 1.9 中, `?' 跟着一个七位 ASCII 字符的字面值表式的不再是其在 ASCII 字符集中对应的整数码点了,而是一个单字节字符串对象,直接表示了这个字符。

  1. p ?a    # 97, Ruby 1.8
  2. p ?a    # "a", Ruby 1.9
复制代码
而 String#each_byte 传递给块的参数却是整型,表式了一个字节。将

  1. Dispatcher[b]
复制代码
改为

  1. Dispatcher[b.chr]
复制代码
即可
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 07:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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