なひです。

> From: "NAKAMURA, Hiroshi" <nakahiro / sarion.co.jp>
> Subject: [ruby-dev:21891] `write': closed stream (IOError) from benckmark

> こんなエラーが出ます。
> 
> $ cat foo.rb && ruby -v foo.rb
> require 'benchmark'
> 
> Benchmark.bmbm do |x|
>   f = File.open("out", "w")
>   x.report do
>     f << "abc"
>   end
>   f.close
> end
> 
> ruby 1.8.1 (2003-11-11) [i686-linux]
> Rehearsal ------------------------------------
>  foo.rb:6:in `write': closed stream (IOError)
>         from foo.rb:6:in `<<'
>         from foo.rb:6
>         from foo.rb:5:in `measure'
>         from /usr/local/lib/ruby/1.8/benchmark.rb:296:in `bmbm'
>         from /usr/local/lib/ruby/1.8/benchmark.rb:294:in `each'
>         from /usr/local/lib/ruby/1.8/benchmark.rb:294:in `bmbm'
>         from foo.rb:3
> 
> * f.closeをなくすと期待通り動きます。
> * x.reportの中でなければ(f << "abc"を外に出すと)以下同様。
> 
> 本当はbenchmarkの中まで分解して、最小セットを作るべきですね。
> すいません。

手抜きをせずに追いかけてくださった方々のおかげで(ありがとう
ございました)、仕様らしいことがわかりました。reportはblockを
登録するだけで、そこで走るわけじゃない。比較のため、bmbmのblock終了後に
リハーサル含めて走る。というわけで、bmbmのblock終了までに
環境を変えちゃ駄目。

お騒がせしました。