2016-10-02 3 views
1

패키지를 많이 사용하며 내 보낸 기호는 종종 이름을 변경합니다. 나는 패키지를 다시 컴파일 할 때 나는이 같은 경고를 얻을 :이름이 바뀐 수출 기호에 대한 벌크`unintern '

package.lisp:3:1: 
warning: 
    MY-PROJECT also exports the following symbols: 
    (OLD-SYMBOL1 OLD-SYMBOL2 OLD-SYMBOL3) 

See also: 
    Common Lisp Hyperspec, DEFPACKAGE [:macro] 
    SBCL Manual, *ON-PACKAGE-VARIANCE* [:variable] 
--> EVAL-WHEN 
==> 
    (SB-IMPL::%DEFPACKAGE "MY-PACKAGE" '("KE") 'NIL 'NIL 'NIL '("CL") 'NIL 
         'NIL '("NEW-EXPORTED-SYMBOL1" "NEW-EXPORTED-SYMBOL2") '("MY-PROJECT") 'NIL 
         ...) 

내가 난 더 이상 그 기호를 사용하지 않는 시스템에 신호를 (unintern 'old-symbol1)를 사용할 수 있다는 것을 알고. 그러나 많은 이름을 바꿀 때 매우 지루해집니다.

내 질문은 :

1) 자동 unintern 이전/이전에 내 보낸 문자에 sbcl 또는 emacs에 신호를 할 수 있습니까?

2) 그렇지 않은 경우 변수에 "오래된"기호를 모두 가져갈 수 있습니까?

2에 대한 나의 계획은) 당신이 문자 unitern 할 생각하지 않는 키를 (apply #'unintern *old-symbols*)

+3

'* on-package-variance *'를'(list : warn nil : error t)'(변수에 대한 설명 참조)로 설정하면 기호를 삭제할 수있는 옵션이 생깁니다. – jkiiski

+0

이것은 올바른 방향 인 것으로 보이지만 여전히 작동하게 만들 수는 없습니다. 나는': warn '을'nil'으로,': error'를'nil'으로 설정하려고 시도했습니다 ... 어떤 제안도 환영합니다 ... – tsikov

+0

': error t'을 설정해야합니다. 그렇지 않으면 다시 시작하지 않습니다. – jkiiski

답변

4

으로 그렇게 할 수 있습니다. 오류는 기호를 다시 가져 오기 위해 DROP-THEM을 다시 시작해야합니다.

당신은 SBCL을 시작할 때 항상 설정되어 당신의 ~/.sbclrc

(setf *on-package-variance* '(:error t)) 

를 추가 할 수 있습니다.

3

처음처럼 뭔가에 결합하는 것입니다. Unintern은 패키지에서 제거합니다. 나는 당신이 경고를 피하기 위해 그들을 unexport하고 싶다고 생각합니다. 다음과 같은 기능 패키지를 다시 정의 할 때 대신 경고 당신에게 오류를 줄 것이다 목록 (:error t)에 변수 *on-package-variance* 설정

(defun unexport-package-symbols (package) 
    (do-symbols (symbol package) 
    (destructuring-bind (symbol status) 
     (find-symbol (symbol-name symbol) package) 
     (when (eq status :external) 
     (cl:unexport symbol package))))) 

;; It takes a package-designator as an argument. 
(unexport-package-symbols "MY-PACKAGE") 
+2

올바른 패키지에서 UNEXPORT해야합니다. 패키지 인수를 제공해야합니다. 그렇지 않으면 '현재'패키지에서 가져올 수 없습니다. FIND-PACKAGE와 동일합니다. 그렇지 않으면 '현재'패키지에서 STATUS를 얻습니다. –

+0

@RainerJoswig 잘 잡으십시오, 코드를 수정했습니다 – PuercoPop

+1

FIND-SYMBOL이 아닌 FIND-PACKAGE라고 말하고 싶습니다. 코드에서 FIND-SYMBOL도 변경해야합니다. –

관련 문제