赞 | 0 |
VIP | 289 |
好人卡 | 7 |
积分 | 1 |
经验 | 7622 |
最后登录 | 2024-2-4 |
在线时间 | 400 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 65
- 在线时间
- 400 小时
- 注册时间
- 2005-10-24
- 帖子
- 634
|
以下引用美兽于2008-2-4 5:09:04的发言:
eval与class_eval追加的方法在重载时会消失,感觉标准的方法仍然是利用超类或者模块mixin.
重载时消失能否举例?
貌似Marshal的dump和load不影响..
# 反射测试1
class A
end
def define_method_for_class(a_class)
method_def = "def hello
p 'Hello'
end"
eval("class #{a_class}; #{method_def}; end")
end
define_method_for_class(A)
(Marshal.load(Marshal.dump(A.new))).hello # => "Hello"
另外根据美兽提出的思路,下面两个分别是用模块揉合和调用define_method
(由于include和define_method是私有方法,外部调用的话只能通过send)
# 反射测试2
class A
end
module Hello
def hello
p 'Hello'
end
end
A.send(:include, Hello)
A.new.hello # => "Hello"
# 反射测试3
class B
end
B.send(:define_method, :hello){
p 'Hello'
}
B.new.hello # => "Hello" 系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~ |
|