标题: 能不能同时兼有子类 [打印本页] 作者: hys111111 时间: 2014-5-3 10:19 标题: 能不能同时兼有子类 class Game_Event < Game_Character
和
class Game_Player < Game_Character
Game_Event和Game_Player都是Game_Character的类。
我为了方便计算,能不能让一个Game_Character同时是Game_Event和Game_Player,
即if self.is_a?(Game_Player)和self.is_a?(Game_Event)都为true?作者: 浮云半仙 时间: 2014-5-3 10:29
我能说你改用unless语句么?作者: 浮云半仙 时间: 2014-5-3 10:32
class A
end
class B<A
end
A.is_a?(B) #false
B.is_a?(A) #false作者: kuerlulu 时间: 2014-5-3 11:32 标题: 重编辑 本帖最后由 kuerlulu 于 2014-5-3 11:49 编辑
很简单,让player继承event,不过不保证不出错
class A; end
class B < A; end
class C < B; end
B.new.is_a?(A) #true
C.new.is_a?(B) #true
C.new.is_a?(A) #true
不好意思,理解错意思了
一个父类的对象是不能is_a?它的子类获得true的
不过你可以在父类里面故意定义这个方法,如果只是想看起来像的话
class A
alias self.is_a? is_a?0xBE
def self.is_a?(*args)
if args[0] == B or args[0] == C then return true end
is_a?0xBE(*args)
end
end作者: yagami 时间: 2014-5-3 19:24 本帖最后由 yagami 于 2014-5-3 19:33 编辑
顺便补充一点 lz不嫌内存浪费的话 可以用组合的方式
class CharacterBase
attr_accessor : a
attr_accessor : b
def initialize(a,b)
@a=a
@b=b
end
end
a b 代表Game_Event 和 Game_Player的实例 如果只需要1个参数 另一个传nil 用起来就
CharacterBase t = new CharacterBase
t.a.xx if t.a !=nil
t.b.xx if t.b !=nil作者: hys111111 时间: 2014-5-4 12:37
算了,我另外想别的办法了。