1

クラスがリストにある場合、clos アクセサー関数を使用できません。

クラスaがあるとします:

(defclass a ()
  ((a :accessor a
      :initarg :a)))

そして、私は2つのインスタンスを作成します:

(defparameter b (make-instance 'a :a 1))
(defparameter c (make-instance 'a :a 2))

そして、リスト内にある間に各インスタンスの値を取得する関数を作成したい場合は、

(defun get-a (lst)
  (mapcar #'a lst))

そしてそれを呼び出す

(get-a '(b c))

しかし、私はエラーが発生します:

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 でアクセサーを直接呼び出す代わりに、アクセサーを含む関数を呼び出した場合にも発生します。また、マップカーの代わりにループなどを使ってみました。

ありがとう

4

1 に答える 1

5

エラーを読むと、説明が得られます。

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)2 つのシンボルのリストです。おそらく、2 つの CLOS インスタンスのリストを作成したいと思うでしょう。LIST評価された引数でリストを作成するために使用します。

于 2014-03-05T20:16:49.433 に答える