[Gauche-devel-jp] use する module にある method と同名の getter が使えない?

Zurück zum Archiv-Index

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*****>



Gauche-devel-jp メーリングリストの案内
Zurück zum Archiv-Index