Function SLOT-VALUE

UP


Function SLOT-VALUE

Function SLOT-VALUE

構文

slot-value object slot-name => value

Arguments and Values:

object - オブジェクト
name - シンボル
value - オブジェクト

定義

関数slot-valueは、objectのスロット名slot-nameの値を返却します。 もしスロット名slot-nameが存在しないときはslot-missingが呼ばれます。 もしスロットがunboundのときは、slot-unboundが呼ばれます。

スロットの値を変更するときに、 マクロsetfslot-valueが使えます。

例文

(defclass foo () 
  ((a :accessor foo-a :initarg :a :initform 1)
   (b :accessor foo-b :initarg :b)
   (c :accessor foo-c :initform 3)))
=>  #<STANDARD-CLASS FOO 244020371>
(setq foo1 (make-instance 'foo :a 'one :b 'two))
=>  #<FOO 36325624>
(slot-value foo1 'a) =>  ONE
(slot-value foo1 'b) =>  TWO
(slot-value foo1 'c) =>  3
(setf (slot-value foo1 'a) 'uno) =>  UNO
(slot-value foo1 'a) =>  UNO
(defmethod foo-method ((x foo))
  (slot-value x 'a))
=>  #<STANDARD-METHOD FOO-METHOD (FOO) 42720573>
(foo-method foo1) =>  UNO

影響

なし。

例外

スロットから読み込むときに、 objectにはスロット名slot-nameが存在しないときは、 slot-missingが次のように呼ばれます。

(slot-missing (class-of instance)
              instance
              slot-name
              'slot-value)

(もしslot-missingが起動されたときは、 slot-valueによって第一返却値が返されます。)

スロットに書き込むときに、 objectにはスロット名slot-nameが存在しないときは、 slot-missingが次のように呼ばれます。

(slot-missing (class-of instance)
              instance
              slot-name
              'setf
              new-value)

(この場合、slot-missingが返却されたとき、 全ての値は無視されます。)

具体的なふるまいは、instanceのメタクラスに依存します。 もしinstanceのメタクラスがstandard-classなら、 決してエラーは発生しません。 もしinstanceのメタクラスがbuilt-in-classなら、 常にエラーが発生します。 もしinstanceが他のメタクラスなら結果は規定されておらず、 状況によってエラーが発生するかもしれませんし、 されないかもしれません。 特にコンディションと構造体についての動作は規定されていません。

参考

slot-missing, slot-unbound, with-slots

備考

実装は必須ではありませんが、 実装者はMetaobject Protocolで説明されている 関数slot-value-using-classを使用して 関数slot-valueを実装することが強く推奨されます。

実装者はslot-valueをコンパイル時にインラインに最適化するかもしれません。


TOP, Github