[Gauche-devel-jp] extend の引数の順番で見えたり見えなかったりする
Ryo Akagi
another_face_another_smile @ yahoo.co.jp
赤木といいます
説明が難しいのですが x-m, aa-m, bb-m, a-m, b-m の5つの モジュール があっ
てそれらを
aa x bb
\/\/ ←下のやつが、上のやつを extend
a b ←この2つを import
の様な関係にします。(後ろの -m は省略)
その際、モジュール a-m, b-m の中で
(extend aa-m x-m)
とすると、特に問題なく 5つの モジュール が export しているものが全部見
れるのですが
(extend x-m aa-m)
だと、a-m を import する順番によっては、aa-m が export しているものが見
えません。
ただし、
(global-variable-ref (find-module 'a-m) 'aa-v)
(with-module a-m aa-v)
の様に、a-m から見ると aa-m が export しているものが見えます。
(aa-v は aa-m で export している)
ここまでで説明したものを、プログラムにして添付しています
% gosh t.scm
で実行できます
また
aa x
\/
a
の様に、片方だけにすると何も起らなくなりました。
以上です
-------------- next part --------------
(define-module x-m
(export x-v)
(define x-v 0)
)
(define-module aa-m
(export aa-v)
(define aa-v 1)
)
(define-module bb-m
(export bb-v)
(define bb-v 2)
)
(define-module a-m
(extend x-m aa-m) ; ダメ
;; (extend aa-m x-m) ; OK
(export a-v)
(define a-v 3)
)
(define-module b-m
(extend x-m bb-m) ; ダメ
;; (extend bb-m x-m) ; OK
(export b-v)
(define b-v 4)
)
;; 以下2つどちらを選んでもエラー
(import a-m) (import b-m) ; "unbound variable: aa-v" になる
;; (import b-m) (import a-m) ; "unbound variable: bb-v" になる
;; 以下、評価しているだけ
a-v
b-v
x-v
aa-v ; error
bb-v
(global-variable-ref (find-module 'a-m) 'aa-v) ; OK
(with-module a-m aa-v) ; OK
(global-variable-ref (find-module 'user) 'aa-v) ; error
(with-module user aa-v) ; error
Gauche-devel-jp メーリングリストの案内 |