[Gauche-devel-jp] Re: call-with-iteratorのend?の書き方

アーカイブの一覧に戻る

えんどう yasuy****@javao*****
2004年 2月 2日 (月) 23:59:21 JST


 えんどうです。

>回避するなら、nextでひとつ先読みしておくことでしょうか…
>要素がひとつも無い場合もあるでしょうから、、procが呼ばれる前に
>まず1行読んどいて、バッファに持っておく。nextはバッファを更新して、
>古いバッファの内容を返す…って具合です。

やはりそのように処理するしかないのですね。call-with-iterator を

(define-method call-with-iterator ((r <mysql-result-set>) proc . option)
  (if (not (slot-ref r 'open))
      (raise
       (make <dbi-exception> :error-code -4 :message "<mysql-result> already closed.")))
  (let ((is-end #f))
    (define (fetch-one-row)
      (if (not is-end)
	  (let ((one-row (mysql-fetch-row (slot-ref r '%result-set))))
	    (if (null? one-row) (set! is-end #t))
	    (if (equal? one-row '()) (set! is-end #t))
	    one-row)
	  '()))
    (let ((prev-row (fetch-one-row)))
      (define (end?) is-end)
      (define (next)
	(let ((row prev-row))
	  (set! prev-row (fetch-one-row))
	  row))
    (proc end? next))))

上記のように書き換えたところ、

((10 nobsun) (20 yasuyuki))

という結果が返るようになりました。

-- 
ENDO Yasuyuki <yasuy****@javao*****>
http://www.javaopen.org/~yasuyuki/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)




Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る