以下有什么区别?
(require "asdf") ; String.
(require 'asdf) ; Symbol.
(require :asdf) ; Keyword.
Run Code Online (Sandbox Code Playgroud)
需要模块时应该使用哪个?
小智 7
的参数require是一个字符串指示符,它是
字符串的指示符;也就是说,一个表示字符串的对象,它是以下之一:字符(表示以该字符为唯一元素的单例字符串)、符号(表示作为其名称的字符串)或字符串(表示其自身) )。
因此,上述任何一项都将起作用。 但是,require定义为使用 对模块名称进行比较string=,这意味着大小写很重要。因此,这意味着(require 'asdf)相同(require :ASDF)的是一样的(require "ASDF"),但不一样的(require "asdf")。(事实上,航空自卫队增加了两个"asdf",并"ASDF"以*modules*这样既会工作)。
就个人而言,我使用关键字符号,所以(require :asdf), (provide :spotbat),这意味着*modules*总是以大写字符串结尾。
我发现使用string=比较模块名称的决定有点烦人,但现在就是这样,并且它还与各种其他约定兼容:例如,包名称区分大小写。并且理论上它允许,例如,区分大小写的首选语言与 CL 一起存在于同一图像中((find-package "cl")可能是导出其所有符号的包)。