Tietew です。
コンソールのない mswin32 組み込み Ruby で,独自に作ったコンソー
ルウィンドウに文字列を転送する write 特異メソッドのみを定義した
Object のインスタンスを $stdout/$stderr にセットしています。
Kernel#print などを呼んでいる場合はそれでいいのですが,lib/* に
も存在する $stderr.puts などが呼んだ途端に NoMethodError になっ
てしまい,うまくありません。現在は IO の出力系メソッドを一通り定
義することで回避しようとしていますが,ドキュメントには write し
か定義しなくて良いというようなことが書かれているので矛盾している
気がします。
改善案:
IO::Writable モジュール (出力系メソッドを #write に委譲する) を
用意し (IO はそれを include),$stdout/$stderr はこのモジュールを
extend/include していることを義務づけるようにする。
問題点:
sync= や flush はどうするか?
preview が迫っているのでとりあえず問題提起だけ。暇があればパッチ
書いてみます。
―[ Tietew ]――――――――――――――――――――――――――
メ : tietew / tietew.net / tietew / raug.net / tietew / masuclub.net
ホペ: http://www.tietew.net/ Tietew Windows Lab.
http://www.masuclub.net/ 鱒倶楽部
指紋: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA