Develop and Download Open Source Software

[Gauche-devel-jp] extend の引数の順番で見えたり見えなかったりする

Ryo Akagi another_face_another_smile @ yahoo.co.jp
2010年 12月 26日 (日) 00:28:17 JST


赤木といいます

説明が難しいのですが 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 メーリングリストの案内