Singleton方法是仅在一个实例上定义的方法。
foo = Foo.new
def foo.case
#singleton method
end
没有instance_eval
做同样的事情吗?为特定实例定义方法?有什么区别?
答案 0 :(得分:5)
答案 1 :(得分:4)
元编程工具
instance_eval
做了同样的事情吗?为特定实例定义方法?
没有。 instance_eval
与定义方法没有任何关系。它在接收器的上下文中评估块。通常,块是词法范围的,包括self
,使用绑定到消息接收者的instance_eval
评估使用self
评估的块。
one = Object.new
two = Object.new
def one.my_eval; yield end
instance_variables
# => []
one.my_eval { @ivar_one = 1 }
one.instance_variables
# => []
instance_variables
# => [:@ivar_one]
two.instance_eval { @ivar_two = 2 }
two.instance_variables
# => [:@ivar_two]
那真正的区别是什么?
他们是完全无关的。询问两个不相关的事物之间的区别并不是真的有意义。