모든 기호 정의를 특정 접두사와 바인딩 해제하려면 어떻게해야합니까? 싶지 않으므로 시작하는 모든 변수와 함수를

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



답변

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

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

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


답변

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

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

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

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


답변