如何理解这个 Common Lisp 包的行为?
How to understand this Common Lisp package behavior?
我是 Common Lisp 的新手。当主题是包和系统时更是如此。我正在使用一个程序,有些东西让我很感兴趣。顺便说一句,我正在使用 SBCL 和 Slime (Emacs)。
处于顶级 (CL-USER) 我可以做到:
CL-USER> (application-name/file-name::%function-on-parenscript)
这有效!然后,我改为 inside 包:
CL-USER> (in-package :application-name)
好的。所以,我认为 after 在应用程序名称中:
APPLICATION-NAME>
我可以做到:
APPLICATION-NAME> (file-name::%function-on-parenscript)
但是,这不起作用。如果我这样做,它就会起作用:
APPLICATION-NAME> (application-name/file-name::%function-on-parenscript)
1 - 如果我在 application-name
里面,为什么需要 application-name
?
2 - 为什么有时我需要使用 ::
而其他时候我只使用 :
来调用东西?
Common Lisp 包用于解决名称空间问题。但他们真的很吸引我。
application-name/file-name
和 application-name
是两个不同的包,它们在名称上相似,仅对人类读者而言相似,但在其他方面无关。
符号要么写有包前缀,要么不写。当有包前缀时,包是冒号或双冒号左边的部分。
双冒号是一种引用未从包中导出的符号(它们是私有的)的方法。
单个冒号用于导出的符号。
如果您要引用的符号在当前包中是“可访问的”,例如因为您正在“使用”它的包并且它是导出的,那么您可以在没有包前缀的情况下编写符号
我是 Common Lisp 的新手。当主题是包和系统时更是如此。我正在使用一个程序,有些东西让我很感兴趣。顺便说一句,我正在使用 SBCL 和 Slime (Emacs)。
处于顶级 (CL-USER) 我可以做到:
CL-USER> (application-name/file-name::%function-on-parenscript)
这有效!然后,我改为 inside 包:
CL-USER> (in-package :application-name)
好的。所以,我认为 after 在应用程序名称中:
APPLICATION-NAME>
我可以做到:
APPLICATION-NAME> (file-name::%function-on-parenscript)
但是,这不起作用。如果我这样做,它就会起作用:
APPLICATION-NAME> (application-name/file-name::%function-on-parenscript)
1 - 如果我在 application-name
里面,为什么需要 application-name
?
2 - 为什么有时我需要使用 ::
而其他时候我只使用 :
来调用东西?
Common Lisp 包用于解决名称空间问题。但他们真的很吸引我。
application-name/file-name
和 application-name
是两个不同的包,它们在名称上相似,仅对人类读者而言相似,但在其他方面无关。
符号要么写有包前缀,要么不写。当有包前缀时,包是冒号或双冒号左边的部分。
双冒号是一种引用未从包中导出的符号(它们是私有的)的方法。
单个冒号用于导出的符号。
如果您要引用的符号在当前包中是“可访问的”,例如因为您正在“使用”它的包并且它是导出的,那么您可以在没有包前缀的情况下编写符号