簡體   English   中英

instance_eval和singleton方法之間的區別

[英]Difference between instance_eval and singleton method

單例方法是僅在一個實例上定義的方法。

foo = Foo.new
def foo.case
  #singleton method
end

instance_eval不是一樣的嗎? 為特定實例定義方法? 有什么不同?

Object# instance_eval是一個方法,您可以使用它確定對象的方法。

Singleton類是一個“地方”,其中為對象“生命”定義的單例方法。

所以這些是完全不同的兩件事。

元編程工具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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM