「Common Lisp Object System」の版間の差分

削除された内容 追加された内容
Guicho w (会話 | 投稿記録)
編集の要約なし
Guicho w (会話 | 投稿記録)
17行目:
(defclass a-class ()
((a-slot :initarg :a)))
(export '(a-class)) ;; a:a-slot は公開されない。
 
;;;; パッケージbでb-classを定義する ;;;;
23行目:
(defclass b-class ()
((b-slot :initarg :b)))
(export '(b-class b-slot)) ;; b:b-slot は公開される。
 
;;;; パッケージcでパッケージaとbをインポートする。
;;;; その中からa-slotとb-slotを呼び出してみる。
(in-package :c)
(use :a) ;; a のシンボルをインポートする
(use :a)
(use :b) ;; b のシンボルをインポートする
(use :b)
 
(slot-value (make-instance 'a-class :a 1) 'a-slot)
;; --> slot-missing 'a-slot is not accessible
;; ここでアクセスされているのは c:a-slot である。
;; a:a-slot はインポートされていないので、a-slot は暗黙的に現在のパッケージ c:a-slot として解釈される。
;; 処理系はインスタンスの中の c:a-slot を探すが、そのようなスロットはもちろん存在しない。
 
(slot-value (make-instance 'b-class :b 2) 'b-slot)
;; --> 2
;; b:b-slot は公開されているため、インポートによってシンボル c:b-slot は b:b-slot と同一オブジェクトとなる。
 
;; そのため、処理系はインスタンスの中の b:b-slot を見つけることができる。
</source>