바인딩에 대해 생각하는 좋은 방법은 컨텍스트를 캡슐화하는 개체입니다. 당신은 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.
그냥 명확하게 -이 예는 단지 배후에 어떤 일이 벌어지는 지 알아 보여준다. 바인딩 객체를 직접 처리해야하는 경우는 거의 없습니다.
루비 모듈, 클래스 및 메소드는 공용 인스턴스 메서드 등을 통해 명시 적으로 표시되지 않는 한 계층 구조보다 하위 계층 구조에있는 객체에 대한 바인딩을 나타냅니다. 그러나 다른 방법은 사용하지 않습니다. 그러나 프로그래밍에 익숙하지 않은 경우에는 이것에 너무 깊이 관여 할 필요가 없습니다.
설명해 주셔서 감사합니다! 당신이 말한 것을 기반으로, 그것은 변수 바인딩 오른쪽 범위 특정 권리 것 같습니다? 제 말은 변수 바인딩에 관해서 이야기 할 때, 이것을 이해하기 위해 범위를 컨텍스트로 제공해야한다는 것입니다. – wmock
@WillsonMock 맞아. – sawa