单例方法是仅在一个实例上定义的方法.
foo = Foo.new
def foo.case
#singleton method
end
Run Code Online (Sandbox Code Playgroud)
不会instance_eval做同样的事情?为特定实例定义方法?有什么不同?
元编程工具也
instance_eval能做同样的事情,对吗?为特定实例定义方法?
不,instance_eval与定义方法无关。它在接收者的上下文中评估块。通常,块是词法范围的,包括使用绑定到消息接收者来评估的self块。instance_evalself
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]
Run Code Online (Sandbox Code Playgroud)
那么真正的区别是什么?
它们完全无关。询问两个不相关的事物之间的区别实际上没有意义。
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |