【发布时间】:2019-07-04 08:50:41
【问题描述】:
有没有办法动态地请求另一个包中的绑定,动态我的意思是不知道某个包中绑定的确切名称。一个具体的案例是:
在包 B 中,我知道存在一个包 A,它有一个特定的类,我通过(在 LispWorks 中)提取该类的所有直接槽:
(setq direct-slots (mapcar #'slot-definition-name
(class-direct-slots (class-of class-in-package-A))))
现在我想使用 MAPCAR 将这些插槽绑定到一些值:
(mapcar #'(lambda (slot) (list slot
(funcall slot class-in-package-A)))
direct-slots)
这不起作用,因为我在包 B 中并且需要包精度才能调用 (funcall slot class-in-package-A),packageA::slot 显然是错误的。有没有一个函数可以在包中搜索某个符号?
【问题讨论】:
-
CLASS-OF ?那么你是在要求元类。
-
槽名一般不是函数名,因此调用它是没有意义的。你真的想在一个类对象上调用一个槽名吗?那是你要的吗?类对象是一个元类。
-
也许您应该发布代码,可以使用实际的错误消息进行复制。目前尚不清楚您可能想要做什么与包有关。
标签: package common-lisp clos