不可能定义一个符号并同时从另一个包中+引用它。+
您不需要导入符号。如果它们被导出,您可以将它们用作foo:+. 如果它们没有导出,它们可以用作foo::+.
using如果您不想使符号在 using 包中可访问,那么(在编程意义上 - 确保将包作为向量操作的命名空间引入是有意义的)包是没有意义的。如果你想写vec:+,那么使用包是没有意义的VEC。只需从中导出符号VEC。
仅作说明:
CL-USER 6 > (defpackage "VEC"
(:use "CL")
(:shadow cl:+ cl:-)
(:export "+" "-"))
#<The VEC package, 0/16 internal, 2/16 external>
CL-USER 7 > (defun vec:+ (a b) (+ a b))
VEC:+
CL-USER 8 > (defun vec:- (a b) (- a b))
VEC:-
CL-USER 9 > (defpackage "GRAPH" (:use "CL"))
#<The GRAPH package, 0/16 internal, 0/16 external>
CL-USER 10 > (in-package "GRAPH")
#<The GRAPH package, 0/16 internal, 0/16 external>
GRAPH 11 > (defun foo (a b) (+ (vec:+ a b) 42))
FOO
注意,如果当前包是VEC,则+指VEC:+. 对于 CL +,您需要编写CL:+.
永远记住:
- 包在读取时解析。
- 当前包确定在读取期间使用的默认包。更改当前包不会更改已读取的符号。