defclass の slot には、:type オプションを指定することができる。 期待としては、:type オプションを指定した場合、指定した型を満たさない値を代入しようとすると、エラーとなって欲しい。ところが、SBCL ではそのようにならない。 (defclass foo () ((x :accessor foo-x :initarg :x :type integer))) (let ((x (make-instance 'foo :x 1))) (setf (foo-x x) :foo) (foo-x x)) ; => :foo defclass と slot へのアクセスを optimize safety で評価すると、期待する挙動となる。 (locally (declare (optimize safety)) (defclass foo () ((x :accessor fo