mugyu
6/17/2012 - 3:04 AM

gauche で クラス定義

gauche で クラス定義

(define-class <hoge> ()
  ((foo :init-value "FOO" :setter set-foo!)
   (bar :init-value "BAR" :setter set-bar!)))
(define hoge (make <hoge>))
(print hoge) ; => #<<hoge> 021b7398>

(define-method write-object ((hoge <hoge>) port)
  (format port "#<<hoge> \"~a\" (~a)>"
          (slot-ref hoge 'foo)
          (slot-ref hoge 'bar)))
(print hoge) ; => #<<hoge> "FOO" (BAR)>

(set-foo! hoge "Foo")
(set-bar! hoge "Bar")
(print hoge) ; => #<<hoge> "Foo" (Bar)>

(set! (slot-ref hoge 'foo) "foo")
(set! (slot-ref hoge 'bar) "bar")
(print hoge) ; => #<<hoge> "foo" (bar)>

(print (slot-ref hoge 'foo)) ; => foo
(print (slot-ref hoge 'bar)) ; => bar