想一想,它的一個好方法是綁定是封裝上下文的對象。您可以使用關鍵字binding
揭示綁定對象:
a = 10 # a is defined in the 'main' context
def get_binding # so is the 'get_binding' method
b = 20
binding
end
n = get_binding #=> #<Binding:0x00...>
現在,因爲get_binding
是main
範圍內確定,返回的綁定對象包括方法的當地情況,以及主要範圍內任何東西。變量b
在main
中不可用,而a
在get_binding
中可用。
您可以通過使用eval
綁定對象交互證明這一點:
a #=> 10
eval('a', n) #=> undefined local variable or method 'a' for main:Object
b #=> undefined local variable or method `b' for main:Object
eval('b', n) #=> 20 # but it is defined within the context the n binding was created.
只是爲了澄清 - 這個例子只是揭示了幕後發生了什麼。如果有的話,你將很少需要直接處理綁定對象。
Ruby模塊,類和方法揭示了它們綁定到比它們低的層次結構的對象,但不是相反,除非它們通過公共實例方法等明確公開。這是一種過分簡單化,但如果你不熟悉編程,就沒有必要深入瞭解這一點。
感謝您的解釋!根據你所說的,似乎變量綁定是特定於範圍的權利?我的意思是,當你談論變量綁定時,你必須提供範圍作爲上下文才能使其有意義。 – wmock 2013-02-16 04:53:00
@WillsonMock這是正確的。 – sawa 2013-02-16 04:58:01