Jan*_*ard 3 lisp sbcl common-lisp clos
这是我班级的套餐:
(in-package :cl-user)
(defpackage foo
(:use :cl)
(:export :bar))
(in-package :foo)
(defclass bar ()
(baz))
Run Code Online (Sandbox Code Playgroud)
我可以创建一个bar包的实例cl-user.
CL-USER> (defvar f)
F
CL-USER> (setf f (make-instance 'foo:bar))
#<FOO:BAR {10044340C3}>
Run Code Online (Sandbox Code Playgroud)
但我无法访问该成员baz.slot-value像这样打电话......
CL-USER> (slot-value f 'baz)
Run Code Online (Sandbox Code Playgroud)
...导致此错误消息:
When attempting to read the slot's value (slot-value), the slot
BAZ is missing from the object #<FOO:BAR {10044340C3}>.
[Condition of type SIMPLE-ERROR]
Run Code Online (Sandbox Code Playgroud)
我已经尝试添加baz到:export列表中,但这也不起作用.
如何从包中导出插槽和访问器?
Rai*_*wig 16
您无法导出插槽和访问者.
在Common Lisp中,您可以导出符号.
因此,导出BAZ命名槽的符号.
然后在包中CL-USER:
(slot-value some-instance 'foo:baz)
Run Code Online (Sandbox Code Playgroud)
不记得你必须写:
(slot-value some-instance 'foo::baz)
Run Code Online (Sandbox Code Playgroud)
如果将符号导入包中CL-USER:
(slot-value some-instance 'baz)
Run Code Online (Sandbox Code Playgroud)