문제

이 질문의 재귀 적 특성에 대해 사과하지만 선택한 답변 질문에 대해 나는 반성에 대한 나의 이해에 의문을 제기했다.

나는 반사가 주로 프로그램이 실행중인 프로그램의 내부 사건을 쿼리하는 것에 관한 것이라고 생각했다. 이 응답에 제공된 예는 Ruby의 내장 정수 클래스를 패치합니다.

  • 런타임 수정보다는 기능 과부하/상속과 같지 않습니까?
  • 클래스 재개가 실제로 반성의 예입니까?
도움이 되었습니까?

해결책

반사는 늦은 바인딩을 구현하는 데 사용될 수 있습니다.

늦은 바인딩을 사용하여 원숭이 패치를 구현할 수 있습니다.

원숭이 패치는 해당 답에 표시된 코딩 스타일을 달성하는 데 사용될 수 있습니다.

그러나 원숭이 패치 또는 반사가 필요하지 않은 이러한 기능을 구현하는 다른 방법이 있습니다. 도대체 좋은 매크로 프리 컴파일러가 당신을 가까이하게 할 수 있습니다.

따라서 기술적으로 정확하지만 (IMHO) 가장 큰 예입니다.

다른 팁

재귀 수준을 높일 위험이 높아지면 해당 링크에서 내 답변을 언급하고 있지만 응답하고 싶습니다.

오해는 안쪽을 바라 보는 것을 언급하는 반사에 대한 직관적 인 이해 때문에 오해가 쉬운 것입니다. 예를 들어, Ruby에서는 프로그래밍에서 반사의 중요한 측면이기도합니다. 예를 들어, instance_of와 같은 메소드가 런타임에 자신에 대해 질문 할 수있는 방법이 있습니다.

그러나 살펴보십시오 반사의 위키 백과 정의:

반사는 컴퓨터 프로그램이 관찰 할 수있는 과정입니다. 그리고 수정 고유 한 구조와 행동.

보시다시피, 반사는 단순한 런타임 자기 검사 이상입니다. 또한 런타임 동작을 변경하는 능력이기도합니다. 클래스 재개는 "원숭이 패치"라고도합니다. 그것에 대해 더 많이 읽을 수 있습니다 여기.

원숭이 패치는 방법입니다 런타임 코드를 확장하거나 수정하십시오 원래 소스 코드를 변경하지 않고 동적 언어

이 프로세스는 다음과 같은 것으로 언급됩니다. - 게릴라 패치 - 이전에 선언 된 클래스 확장 - 재개 수업 - 동적 펑크 - 납치 - 오리 펀칭 - 메서드 스와이징

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top