当你use
使用一个包时,如果使用的包发生变化,有几种微妙的方式可能会出错。
首先,该包将来可能会导出更多符号。例如,如果包导出了一个新符号library:rhombus
并且您已经使用它myapp::rhombus
来命名某些东西,那么您突然使用继承的符号以及所有可能的附件(例如类、defuns、宏等),有时会产生奇怪的结果。如果您使用限定符号名称,您将不会得到比您想要的符号更多或更少的符号。
其次,该软件包将来可能会停止导出符号。因此,例如,如果library:with-rhombus
消失,您的调用(with-rhombus (42 42 42) ...)
将突然得到一个无效函数调用的错误,(42 ...)
而不是直接指向问题根源的东西,即“缺失”符号。如果您使用合格的符号名称,您将得到一个Symbol WITH-RHOMBUS is not exported from the LIBRARY package
更清晰的错误。
导入符号(使用:import-from
or:shadowing-import-from
或import
)并非没有问题。导入适用于任何符号,无论它是否是外部的。因此,符号现在可能是library::rhombus
,即不再用于公共消费,但导入仍然可以正常工作,没有错误。
您使用哪个选项取决于您对源程序包的舒适程度。您是否控制它,并且您不会在没有彻底测试的情况下做出任何冲突的更改?继续,随心所欲地导入或使用。否则,请小心检查库包接口更改时的意外副作用。