首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lisp clos访问器问题

lisp clos访问器问题
EN

Stack Overflow用户
提问于 2014-03-05 19:59:11
回答 1查看 280关注 0票数 1

当类在列表中时,我不能使用clos访问器函数。

假设我有A班:

代码语言:javascript
复制
(defclass a ()
  ((a :accessor a
      :initarg :a)))

我做了两个例子:

代码语言:javascript
复制
(defparameter b (make-instance 'a :a 1))
(defparameter c (make-instance 'a :a 2))

然后,如果我想创建一个函数,在列表中获取每个实例的a值,我将这样做。

代码语言:javascript
复制
(defun get-a (lst)
  (mapcar #'a lst))

然后用它

代码语言:javascript
复制
(get-a '(b c))

但我这样做了--我犯了一个错误:

代码语言:javascript
复制
There is no applicable method for the generic function
  #<STANDARD-GENERIC-FUNCTION A (1)>
when called with arguments
  (B).
    [Condition of type SIMPLE-ERROR]

如果不是直接用mapcar调用访问器,而是调用包含访问器的函数,也会发生这种情况。此外,我尝试使用循环和其他东西,而不是地图。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-05 20:16:49

如果你读错了,你就会得到解释。

代码语言:javascript
复制
There is no applicable method for the generic function
  #<STANDARD-GENERIC-FUNCTION A (1)>
when called with arguments
  (B).

所以你接到了一个类似于(a 'b)的电话。但是b是一个符号,而不是CLOS实例。

(b c)是由两个符号组成的列表。您可能希望创建一个包含两个CLOS实例的列表。使用LIST创建带有计算参数的列表。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22207932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档