모든 기호 정의를 특정 접두사와 바인딩 해제하려면 어떻게해야합니까?


11

패키지의 API를 자주 변경하고 있지만 완성 된 모든 정의 된 기호 (필요한대로)를 company-mode가져옵니다 . 우연히 언 바운드 이름을 사용하고 싶지 않으므로 시작하는 모든 변수와 함수를 어떻게 바인딩 해제 할 수 있습니까? 이 후, 나는 단순히 다시 할 수있을 것 입니다.my-package-load-file

답변:


10

unload-featureElisp 소스 또는 바이트 컴파일 파일로드의 일부로 정의 된 모든 기호를 정의 해제하려면 호출 하십시오. provide마지막 에 전화하여 파일이 끝나는 지 확인하십시오 . 이것은 load함수 중 하나를 통해 require또는를 통해 파일을로드했다고 가정하고 C-M-x( eval-defun) 또는 유사한 메커니즘으로 정의 된 기호를 정의하지 않습니다 .

심볼을 정의한 패키지가 아닌 이름을 기준으로 심볼을 바인딩 해제하려면 mapatoms모든 심볼을 반복 할 수 있습니다 .

(mapatoms (lambda (symbol)
            (if (string-prefix-p "foo-" (symbol-name symbol))
                (unintern symbol))))

유용하지만, 이것이 대화식 개발에 효과적이라고 생각하지 않습니다. 저는 feature시스템 보다 한 단계 깊습니다 . 명시 적 그룹화없이 함수 및 변수로만 작업하고 있습니다. 나는 평가를 귀찮게하지 않았습니다 (provide 'my-package).
Sean Allred

2
@SeanAllred 나는 사용하지 않는 좋은 이유를 생각할 수 없다 provide. 어쨌든, 당신이 정말로 더러운 일을하고 싶다면 내 편집을 참조하십시오.
질 'SO-정지 존재 악마'

오, 나는 이것을 좋아한다 provide. 나는이 경우에는 효과가 없을 것이라고 생각한다. 함수는 대화식으로 평가 된 경우 정의 된 파일을 기억합니까?
Sean Allred

2
unload-feature파일에서 코드를로드하지 않고 평가하는 경우 (효과가있는) 효과가 없습니다 provide.
Drew

2
@SeanAllred 아니요, 함수는 전체 파일을로드 할 때로드 된 경우 어디에서로드되었는지 기억합니다.
Gilles 'SO- 악마 그만해

7
  • makunbound심볼을 동적 변수로 사용 하지 않도록합니다 (즉, void symbol-value).

  • fmakunbound함수로서의 심볼 사용 을 제거하는 데 사용합니다 (예 : void symbol-function).

  • mapatoms모든 기호를 반복하는 데 사용 합니다. 그 각각에 관한 법률 symbol-name호출 둘 : 당신이 관심있는 특정 접두사에 의해 일치 makunbound하고 fmakunbound그것을.

  • 변수 나 함수로 사용하는 것이 아니라 기호 자체에 대해 완성도를 사용 하지 않는 한unintern 기호 에 대해 필요하지 않습니다 . 당신은하지만 않는 완전히 기호를 제거하려면 다음 사용합니다 .unintern

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.