Project1
标题: 子类中定义父类已有函数会影响到父类吗? [打印本页]
作者: 黑白界 时间: 2015-2-13 15:58
标题: 子类中定义父类已有函数会影响到父类吗?
还是只在子类中生效
作者: 喵呜喵5 时间: 2015-2-13 16:05
本帖最后由 喵呜喵5 于 2015-2-13 16:40 编辑
正常情况下不会…………
非正常情况下我也不知道
欢迎楼下举一些非正常情况让我涨姿势……
======================================================
非正常人类研究中心
======================================================
class A
def self.hello; p 'hello'; end
end
class B < A
def self.hello(t)
self.superclass.class_eval %Q~define_singleton_method :hello do p "#{t}" end~
end
end
A.hello
B.hello('world')
A.hello
class A
def self.hello; p 'hello'; end
end
class B < A
def self.hello(t)
self.superclass.class_eval %Q~define_singleton_method :hello do p "#{t}" end~
end
end
A.hello
B.hello('world')
A.hello
class A
@@a = 1
def self.hello; p @@a; end
end
class B < A
def self.hello; @@a += 1; p @@a; end
end
A.hello
B.hello
A.hello
class A
@@a = 1
def self.hello; p @@a; end
end
class B < A
def self.hello; @@a += 1; p @@a; end
end
A.hello
B.hello
A.hello
作者: taroxd 时间: 2015-2-13 16:18
喵呜喵5 发表于 2015-2-13 16:05
正常情况下不会…………
非正常情况下我也不知道
非正常情况参上
class C
counter = Hash.new(0)
define_singleton_method :method_added do |sym|
return if equal?(C)
value = counter[sym] += 1
C.send(:define_method, sym){value}
end
end
class CC < C
def a
end
end
p C.new.a # 1
class CCC < C
def a
end
end
p C.new.a # 2
class C
counter = Hash.new(0)
define_singleton_method :method_added do |sym|
return if equal?(C)
value = counter[sym] += 1
C.send(:define_method, sym){value}
end
end
class CC < C
def a
end
end
p C.new.a # 1
class CCC < C
def a
end
end
p C.new.a # 2
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |