【问题标题】:How to make Lisp forget about previously exported symbols?如何让 Lisp 忘记以前导出的符号?
【发布时间】:2012-07-05 19:06:11
【问题描述】:

这就是我从包foo 中导出符号:bar:baz 的方式:

(in-package :cl-user)
(defpackage foo
   (:use :cl)
   (:export :bar :baz))
(in-package :foo)

当我从导出符号列表中删除 :baz 时,SBCL 抱怨并且编译失败。

 warning: 
     FOO also exports the following symbols:
       (FOO:BAZ)

如何在不重新加载 SLIME 的情况下让 SBCL 忘记 :baz

【问题讨论】:

    标签: lisp common-lisp slime sbcl


    【解决方案1】:

    SBCL

    * (apropos "unexport")
    
    UNEXPORT (fbound)
    
    
    * (documentation 'unexport 'function)
    
    "Makes SYMBOLS no longer exported from PACKAGE."
    
    
    * (apropos "unintern")
    
    UNINTERN (fbound)
    
    
    * (documentation 'unintern 'function)
    
    "Makes SYMBOL no longer present in PACKAGE. If SYMBOL was present then T is
    returned, otherwise NIL. If PACKAGE is SYMBOL's home package, then it is made
    uninterned."
    

    【讨论】:

      【解决方案2】:

      有很多关于这些问题的文档,您应该阅读或重读。乍一看,这个包/符号的东西听起来很微不足道,但它与其他语言所做的事情有很大的不同,值得一读(即,当涉及到包和符号时,尝试重用来自其他语言的知识特别危险)。

      如果在阅读文档后仍然遇到问题,请尝试重新阅读它们(通过遇到问题获得的经验将帮助您专注于相关部分;恕我直言,在阅读之间不陷入麻烦的情况下重新阅读并不是很有成效)。

      我发现一些有用的链接:

      【讨论】:

        【解决方案3】:

        搜索将我引到这里,但我遇到的问题略有不同。

        ; caught WARNING:
        ;   MY-PACKAGE also uses the following packages:
        ;     (DEPENDENCY)
        

        对于这种情况,需要

        * (documentation 'unuse-package 'function)
        
        "Remove PACKAGES-TO-UNUSE from the USE list for PACKAGE."
        

        【讨论】:

          猜你喜欢
          • 2020-01-07
          • 1970-01-01
          • 1970-01-01
          • 2012-04-02
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 2021-12-19
          • 2023-01-05
          相关资源
          最近更新 更多