문제

이것은 더 많은 일반적인 질문은 다음의 언어-특정,사으로 부딪 이 문제로 재생하는 동안 파이썬 ncurses 모듈이 있습니다.나를 표시하는 데 필요한 로케일 캐릭터와 그들로 인정되는 문자,그래서 단지 신속하게 원숭이-패치 몇 가지 기능/에서 방법을 저주하는 모듈이 있습니다.

이것이 나는 빠르고 추한 솔루션을 경우에도,그것은 작동합니다.와 변경 사항 relativly 작은,그래서 수 있는 희망지 않은 엉망으로 아무것도.내 계획은 다른 해결책을 발견하지만,그것은 작동하고 잘 작동하는 방법을 알고,그것은,나는 앞으로 다른 문제가 발생했고,나이 없으면 버그에서 최신 버전이 있는지 확인합니다.

더 많은 일반적인 질문이나 나타났지만 분명히 어떤 언어를 사용하는 원숭이 패 큰 덩어리의 코드가 내부에는 클래스입니다.는 경우 이것은 코드만 사용해 자신 또는 변경 작은입니다.어떤 경우에는 다른 개발자는 나의 코드 하지만,그가 사용하는 몇 가지 잘 알려진 모듈,그래서 그는 할 수 있다고 가정 작동으로 컬렉션을 전시하고 있습니다.그런 다음,이 방법이 갑자기 작동 diffrent 다음 그것을 해야 합니다.

그래서,매우 주관적이어야,우리가 사용하는 원숭이가 패치,그리고 그렇다면,언제,어떻게?어떻게 해야 우리가 그것을 문서?


편집:에 대한@guerda:

원숭이-패치 적용하는 능력 dynamicly 동작을 변경의 일부 조각의 코드에서 실행시간을 변경하지 않고 코드 자체입니다.

작은 예제에서는 Python:

import os
def ld(name):
    print("The directory won't be listed here, it's a feature!")

os.listdir = ld

# now what happens if we call os.listdir("/home/")?
os.listdir("/home/")
도움이 되었습니까?

해결책

하지 않다!

특히 무료 소프트웨어를 사용하면 메인 배포판으로 변경할 수있는 모든 가능성이 있습니다. 그러나 로컬 사본에 약하게 문서화 된 해킹이있는 경우 제품을 배송하고 다음 버전의 CURSES (보안 업데이트)로 업그레이드하는 데 비용이 많이 드는 비용이 매우 높습니다.

보다 이 답변 외국 코드베이스에서 가능한 것이 무엇인지 엿볼 수 있습니다. 그만큼 링크 된 스크린 캐스트 실제로 시계의 가치가 있습니다. 갑자기 더러운 해킹이 귀중한 기여로 바뀝니다.

어떤 이유로 든 패치를 상류로 얻을 수없는 경우, 최소한 로컬 (GIT) 리포를 만들어 업스트림을 추적하고 별도의 지점을 변경하십시오.

최근에 나는 원숭이 패치를 최후의 수단으로 받아 들여야하는 지점을 만났습니다. 인형 Ruby 코드의 "Run-everywhere"조각입니다. 에이전트는 잠재적으로 인증 된 시스템을 실행해야하므로 특정 Ruby 버전을 요구할 수 없습니다. 이들 중 일부에는 런타임에서 원숭이 패치 선택 메소드로 작업 할 수있는 버그가 있습니다. 이 패치는 버전 별이며 포함되어 있으며 대상이 동결됩니다. 나는 거기에 다른 대안이 없다.

다른 팁

나는 말하지 않을 것입니다.

각 원숭이 패치는 예외가되어야하며 (예 : // 핵 주석도) 표시되므로 다시 추적하기 쉽습니다.

우리 모두 알다시피, 못생긴 코드를 제자리에 두는 것은 쉬운 일이므로 더 이상 시간을 보내는 이유는 무엇입니까? 그래서 못생긴 코드는 오랫동안있을 것입니다.

동의 David 에는 원숭이 깁는 생산 코드는 일반적으로 좋은 생각이 아니다.

그러나 믿는 언어로 지원하는 원숭이 깁는 것은 매우 귀중한 공구에 대한 단위 테스트입니다.그것은 당신을 분리하 코드 조각을 테스트하는 데 필요가 있는 경우에도 신속 인스턴스에 대한 시스템 호출할 수 없는 종속성을 주입됩니다.

나는 단일 결정적인 예/작별 대답으로 질문을 다룰 수 없다고 생각합니다. 언어와 구현의 차이점을 고려해야합니다.

Python에서는 클래스를 원숭이를 전혀 사용할 수 있는지 고려해야합니다 (이것을 참조하십시오. 그래서 질문 토론의 경우), Python의 약간 덜 구현과 관련이 있습니다. 그래서 나는 조심스럽고 원숭이 패치 전에 대안을 찾는 노력을 소비하는 경향이 있습니다.

Ruby에서는 통역사로 OO로 내려 가도록 만들어진 Otoh에서 C 또는 Ruby에서 구현되었는지 여부에 관계없이 클래스를 수정할 수 있습니다. 객체 (거의 모든 것의 기본 클래스)도 수정에 개방적입니다. 따라서 원숭이 패치는 해당 커뮤니티의 기술로 더 열정적으로 채택됩니다.

한 단어 : oscommerce.

수수께끼가되기 전에 그와 함께 연주 한 적이 없다면

// BOF: Fixed/added/removed bla bla bla
...
// EOF

"당신이 어디에 있든"정신성을두기 때문에 전체 코드베이스가 저하되었다는 것은 말할 것도 없습니다. OO (상속 및 복합 클래스가 떠오르는)와 같은 새로운 프로그래밍 개념은 이러한 비 문제를 만들기 위해 설계되었습니다. 그것을 써!

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