#http-get の sink に出力ファイルポートを渡すと output string port required, とエラーが出るようになってしまっているようです。
#こんなコードで再現します。
#(use rfc.http)
(http-get "practical-scheme.net" "/"
:sink (open-output-file "test.txt")
:fulusher (lambda(sink header) (close-output-port sink) #f))
#具体的なエラーメッセージはこんな感じです。
#*** ERROR: output string port required, but got #<oport test.txt 007675b0>
Stack Trace:
_______________________________________
0 (receive-body in code rep-headers receiver)
At line 641 of "c:\\gauche\\share\\gauche-0.9\\0.9.4_pre3\\lib/rfc/http.
scm"
1 (with-error-handler (lambda (e) (let ((e e)) (%guard-rec e e (else ...
[unknown location]
2 (request-response method conn host request-uri sender receiver `(: ...
At line 244 of "c:\\gauche\\share\\gauche-0.9\\0.9.4_pre3\\lib/rfc/http.
scm"
#使用環境は Windows7 で、 Gauche のバージョンは git head (b84fa9c) です。
#む、昔は動いてたはずだからどっかでエンバグしたかな。
#あ、:flusherのtypoじゃないですか。それでsinkだけが渡ったことになってる。でもエラーメッセージはもっと親切な方がいいな。
#うわー。 カッコワルイ。
#以前にも flusher の typo をやったことありましたね。
##どっちか片方だけを指定してるってユースケースはあるかなあ。基本的には両方指定しないと意味ないものだから、両方揃ってない場合はエラーにした方が良い気がする。
#call-with-output-file でポートを開いた場合は flush は必要ないんじゃないですかね。
#ただ、そういう使い方をしていた場合、現在のコードではエラーになっていたはず。いずれ:sinkと:flusherは消える予定なのであまり柔軟にしなくてもいいかなと。
#クッキーの保存でごちゃごちゃやってるコードを書くことがよくあるので、セッション管理が入ったらすごく嬉しいです。
#gosh> (use gauche.collection)
#<undef>
gosh> (use util.sparse)
#<undef>
gosh> (map-to <sparse-u8vector> identity (iota 10 1 2))
*** ERROR: no applicable method for #<generic call-with-builder (19)> with arguments (#<class <sparse-u8vector>> #<closure ((map-to <class> <top> <collection>) #f)> :size 10)
Stack Trace:
_______________________________________
0 (eval expr env)
At line 173 of "/usr/local/share/gauche-0.9/0.9.4_pre3/lib/gauche/interactive.scm"
#sparse vectorにbuilderがないのには、なにか背景があるのでしょうか?
#あ、iotaじゃだめですね。alistでやってみましたが同じでした。