class A; end
A.class_eval do
attr_accessor :x
def barx; end
define_method :foox do; end
end
p A.instance_methods(false).sort
結果:
[:barx, :defined_in_class_eval, :foox, :x, :x=]
p A.singleton_methods
結果 :
[:defined_in_instance_eval, :yaml_tag, :const_missing]
class B; end
B.instance_eval do
attr_accessor :y
def bary; end
define_method :fooy do; end
end
p B.instance_methods(false).sort
結果:
[:fooy, :y, :y=]
p B.singleton_methods
結果:
[:bary, :yaml_tag, :const_missing]
class C; end
singleton_class = class << C; self end
singleton_class.instance_eval do
attr_accessor :z
def barz; puts 'where is barz ?' end
define_method :fooz do; end
end
p C.instance_methods(false).sort
結果:
[]
p C.singleton_methods
結果:
[:z, :z=, :fooz, :yaml_tag, :const_missing]
singleton_class.barz
結果:
where is barz ?
p singleton_class.methods(false)
結果:
[:barz]
所有結果對照:
A.instance_methods : ["barx", "foox", "x", "x="]
A.singleton_methods : []
B.instance_methods : ["fooy", "y", "y="]
B.singleton_methods : ["bary"]
C.instance_methods : []
C.singleton_methods : ["z", "z=", "fooz"]
singleton_class.barz : where is barz ?
singleton_class.methods : ["barz"]
2015年1月23日 星期五
[Ruby] class_eval and instance_eval
一些實驗. in Ruby1.9.3
【下列文章您可能也有興趣】
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言