[英]Difference between instance_eval and singleton method
單例方法是僅在一個實例上定義的方法。
foo = Foo.new
def foo.case
#singleton method
end
instance_eval
不是一樣的嗎? 為特定實例定義方法? 有什么不同?
元編程工具
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]
那真正的區別是什么?
它們完全不相關。 詢問兩個不相關的事物之間的區別並沒有多大意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.