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