Gauche > Archives > 2013/05/15

2013/05/15 13:13:55 UTC齊藤
#
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) です。
2013/05/15 13:33:44 UTCshiro
#
む、昔は動いてたはずだからどっかでエンバグしたかな。
#
あ、:flusherのtypoじゃないですか。それでsinkだけが渡ったことになってる。でもエラーメッセージはもっと親切な方がいいな。
2013/05/15 13:38:35 UTC齊藤
#
うわー。 カッコワルイ。
#
以前にも flusher の typo をやったことありましたね。
#
http://chaton.practical-scheme.net/gauche/a/2011/02/10#entry-4d5428cd-66c7d ← 進歩しない奴だ…
2013/05/15 13:42:18 UTCshiro
#
どっちか片方だけを指定してるってユースケースはあるかなあ。基本的には両方指定しないと意味ないものだから、両方揃ってない場合はエラーにした方が良い気がする。
2013/05/15 13:46:39 UTC齊藤
#
call-with-output-file でポートを開いた場合は flush は必要ないんじゃないですかね。
2013/05/15 13:49:41 UTCshiro
#
ただ、そういう使い方をしていた場合、現在のコードではエラーになっていたはず。いずれ:sinkと:flusherは消える予定なのであまり柔軟にしなくてもいいかなと。
2013/05/15 14:08:59 UTC齊藤
#
クッキーの保存でごちゃごちゃやってるコードを書くことがよくあるので、セッション管理が入ったらすごく嬉しいです。
2013/05/15 22:53:28 UTCyamasushi
#
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でやってみましたが同じでした。