【问题标题】:How to export slots and accessors from Lisp classes?如何从 Lisp 类中导出插槽和访问器?
【发布时间】:2012-07-05 19:42:41
【问题描述】:

这是我班级的包:

(in-package :cl-user)
(defpackage foo
  (:use :cl)
  (:export :bar))
(in-package :foo)

(defclass bar ()
  (baz))

我可以在包cl-user 中创建bar 的实例。

CL-USER> (defvar f)
F
CL-USER> (setf f (make-instance 'foo:bar))
#<FOO:BAR {10044340C3}>

但我无法访问成员 baz。像这样调用slot-value ...

CL-USER> (slot-value f 'baz)

...导致此错误消息:

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]

我已经尝试将baz 添加到:export 列表中,但这也不起作用。

如何从包中导出槽和访问器?

【问题讨论】:

    标签: lisp common-lisp sbcl clos


    【解决方案1】:

    您不能导出插槽和访问器。

    在 Common Lisp 中,您可以导出符号。

    所以,导出符号BAZ 来命名插槽。

    然后在包CL-USER:

    (slot-value some-instance 'foo:baz)
    

    未导出的你要写:

    (slot-value some-instance 'foo::baz)
    

    如果将符号导入包CL-USER

    (slot-value some-instance 'baz)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 2011-09-04
      相关资源
      最近更新 更多