Naoki Nakamura
naoki****@nifty*****
2003年 10月 13日 (月) 01:47:55 JST
はじめまして. Nakamura と申します. Gauche をいつもありがたく使わせて頂いております. さて表題の件ですが, module を使っていて「おや?」と思う挙動がありました. 末尾に記述しました module1.scm と module1-test.scm を同一 dir 内で使う場合, $ gosh module1-test.scm とシェルから打った結果が, 2 #t *** ERROR: unbound variable: size-of Stack Trace: _______________________________________ 0 (size-of x) At line 8 of "./module1-test.scm" となってしまいます. module1.scm の中で (use gauche.collection) を記述しなければ問題なく動くので, collection の中の size-of という method と同名の getter を使っているから問題なのかなと思うのですが, module1.scm でなく module1-test.scm で size-of がエラーになるというの がどうも納得がいきません. ためしに (define-method size-of ((class1 <class1>)) (slot-ref class1 'size)) というのを module1.scm に追加してみても状況は変わりませんでした. ちなみに, 全部を同じファイルに記述すると問題は発生しませんでした. この例では簡略化のため collection の機能は使っていませんが, もし使いた い場合には getter の名前が衝突しないようにすべきなのでしょうか? それともバグなのでしょうか? 環境は debian (woody) 上で, Gauche scheme interpreter, version 0.7.2 [euc-jp,pthreads] です. よろしくお願いします. ;;;;;;;;;;;;;; module1.scm begin ;;;;;;;;;;;;; (define-module module1 (use gauche.collection) (export-all)) (select-module module1) (define-class <class1> () ((type :init-keyword :type :getter type-of) (size :init-keyword :size :getter size-of))) (define c (make <class1> :size 2)) (define s (size-of c)) (provide "module1") ;;;;;;;;;;;;;; module1.scm end ;;;;;;;;;;;;;;; ;;;;;;;;;; module1-test.scm begin ;;;;;;;;;;;; (add-load-path "./") (use module1) (define x (make <class1> :type #t :size 10)) (print s) (print (type-of x)) (print (size-of x)) ;;;;;;;;;; module1-test.scm end ;;;;;;;;;;;;;; -- Naoki Nakamura <naoki****@nifty*****>