这可能是我在其他包中的词法绑定特殊 var 吗?
Is that possible I lexical binding special var in other package?
我有一个非常奇怪的要求,即词法绑定另一个包的特殊变量。
在文件中 A.lisp
(defpackage A
(:use #:CL)
(:export #:a-test))
(in-package A)
(declaim (special *a-sp-v*))
(defun a-test (&key (v *a-sp-v*))
(print v))
在文件中 B.lisp
(defpackage B
(:use #:CL #:A))
(in-package B)
(defun b-test ()
(let ((*a-sp-v* 1)) ; cannot let a-test know
(a-test)))
我一直在我的 REPL 中收到错误 The variable A::*A-SP-V* is unbound.
。
包B
中有一些方法可以绑定*a-sp-v*
吗?让a-test
函数运行特别*a-sp-v*
不管在什么包里?
您的代码很好(不过我会使用 defvar
而不是 declaim
special
)。
您可以 绑定任何符号,它与 它所在的包无关。
您只需要确保绑定您需要绑定的符号,而不是其他东西。
例如,由于您 不是 从 a
导出 a::*a-sp-v*
,因此您的 b-test
绑定 b::*a-sp-v*
而不是 a::*a-sp-v*
。
如果在 b-test
中将 *a-sp-v*
替换为 a::*a-sp-v*
,它应该可以工作。
或者,您可以将 #:*a-sp-v*
添加到 (defpackage A ...)
中的 :export
部分
我有一个非常奇怪的要求,即词法绑定另一个包的特殊变量。
在文件中 A.lisp
(defpackage A
(:use #:CL)
(:export #:a-test))
(in-package A)
(declaim (special *a-sp-v*))
(defun a-test (&key (v *a-sp-v*))
(print v))
在文件中 B.lisp
(defpackage B
(:use #:CL #:A))
(in-package B)
(defun b-test ()
(let ((*a-sp-v* 1)) ; cannot let a-test know
(a-test)))
我一直在我的 REPL 中收到错误 The variable A::*A-SP-V* is unbound.
。
包B
中有一些方法可以绑定*a-sp-v*
吗?让a-test
函数运行特别*a-sp-v*
不管在什么包里?
您的代码很好(不过我会使用 defvar
而不是 declaim
special
)。
您可以 绑定任何符号,它与 它所在的包无关。
您只需要确保绑定您需要绑定的符号,而不是其他东西。
例如,由于您 不是 从 a
导出 a::*a-sp-v*
,因此您的 b-test
绑定 b::*a-sp-v*
而不是 a::*a-sp-v*
。
如果在 b-test
中将 *a-sp-v*
替换为 a::*a-sp-v*
,它应该可以工作。
或者,您可以将 #:*a-sp-v*
添加到 (defpackage A ...)
:export
部分