抑制符号包前缀(Common Lisp)
Suppressing Symbol Package Prefixes (Common Lisp)
当打印出驻留在一个包中但从另一个包中引用的对象名称时,打印名称将包括完整的包名称。例如,以下交互在 PKG1 中实习符号 X,并从 CL-USER 打印它的值:
* *package*
#<PACKAGE "COMMON-LISP-USER">
* (defpackage :pkg1 (:use :cl))
#<PACKAGE "PKG1">
* (in-package :pkg1)
#<PACKAGE "PKG1">
* (defvar x '(a b c))
X
* (in-package :cl-user)
#<PACKAGE "COMMON-LISP-USER">
* pkg1::x
(PKG1::A PKG1::B PKG1::C)
有时出于 diagnostic/debugging 的原因,我想打印出没有包前缀的外部符号。在这种情况下,打印输出将类似于 (A B C)。对于您知道名称含义的复杂或嵌套对象,包前缀会使打印输出难以阅读,尤其是在有多个包的情况下。打印输出时可以暂时抑制前缀吗?
不,但是您可以通过临时绑定 *package*
来省略一个包的前缀以供打印输出。
示例:
(let ((*package* (find-package :pkg1)))
(print pkg1:*x*))
由于 *package*
是 全局动态的 ,这会影响内部调用的所有内容(即在其调用的动态范围内)此 let
形式但不会不会影响外面的任何东西。
当打印出驻留在一个包中但从另一个包中引用的对象名称时,打印名称将包括完整的包名称。例如,以下交互在 PKG1 中实习符号 X,并从 CL-USER 打印它的值:
* *package*
#<PACKAGE "COMMON-LISP-USER">
* (defpackage :pkg1 (:use :cl))
#<PACKAGE "PKG1">
* (in-package :pkg1)
#<PACKAGE "PKG1">
* (defvar x '(a b c))
X
* (in-package :cl-user)
#<PACKAGE "COMMON-LISP-USER">
* pkg1::x
(PKG1::A PKG1::B PKG1::C)
有时出于 diagnostic/debugging 的原因,我想打印出没有包前缀的外部符号。在这种情况下,打印输出将类似于 (A B C)。对于您知道名称含义的复杂或嵌套对象,包前缀会使打印输出难以阅读,尤其是在有多个包的情况下。打印输出时可以暂时抑制前缀吗?
不,但是您可以通过临时绑定 *package*
来省略一个包的前缀以供打印输出。
示例:
(let ((*package* (find-package :pkg1)))
(print pkg1:*x*))
由于 *package*
是 全局动态的 ,这会影响内部调用的所有内容(即在其调用的动态范围内)此 let
形式但不会不会影响外面的任何东西。