2015/09/24
プログラミングGauche 17.5.3練習問題
<logger-generic>
のログ出力のon/offを切り替えられるようにする.
<logger-generic>
クラスにprinting
スロットを追加してその真偽で処理を分ければよい.printing
スロットの値を後で変えられるようにprinting!
メソッドとnot-printing!
メソッドも追加した.
(define-class <logger-generic> (<generic>)
((printing :init-value #t)))
(define-method apply-generic ((gf <logger-generic>) args)
(if (ref gf 'printing)
(begin (format #t "args: ~s\n" args)
(let ((return-value (next-method)))
(format #t "result: ~s\n" return-value)
return-value))
(next-method)))
(define-method not-printing! ((gf <logger-generic>))
(set! (ref gf 'printing) #f))
(define-method printing! ((gf <logger-generic>))
(set! (ref gf 'printing) #t))