[#40647] RAA dead link check — "NAKAMURA, Hiroshi" <nakahiro@...>

なひです。

19 messages 2005/03/04
[#40685] Re: RAA dead link check — "NAKAMURA, Hiroshi" <nakahiro@...> 2005/03/20

-----BEGIN PGP SIGNED MESSAGE-----

[ruby-list:40656] TkTextIO class

From: Hidetoshi NAGAI <nagai@...>
Date: 2005-03-09 07:42:40 UTC
List: ruby-list #40656
永井@知能.九工大です.

TkTextIO クラスというものを Ruby/Tk のサンプルで作りました.
少しは面白いものになりましたので,報告しておきます.

TkTextIO クラスは Ruby/Tk のテキストウィジェットを 
I/O stream として使うためのクラスです.
StringIO に似たものだと思ってもらえばいいでしょう.
TkText のサブクラスですから,もちろんテキストウィジェットとしての
操作も可能です.

StringIO クラスと同様に IO クラスのインスタンスメソッドを
実装していますので,オブジェクトを $stdin, $stdout, $stderr に
代入して使うことが可能です.
置き換えた場合は,単純に puts などをすると TkTextIO の
テキストウィジェット上に出力されることになります.

ただし,重要な違いが一点あります.
それは「すべての処理が byte 単位ではなく文字単位となる」という点です.
そのため,getc は 1 byte の文字コードではなく,1 文字を返します.
マルチバイト文字も getc で 1 文字が得られます.
seek などでの位置の制御や read での読み出しサイズも「文字」が単位です.
例えば seek(10) は「10 byte 目」ではなく「10 文字目」となります.
read(20) も「20 byte」ではなく「20 文字」を返します.

この違いにより,getc が Fixnum を返すことを前提としている部分などで
そのまま置き換えるのには使えませんが,逆にこの点が有用なケース
(必ずしも画面に出す必要はない) もあるかと思います.

なお,readline が用いられている際に $stdin や $stdout の
置き換えとして代入することはできません.

# readline ライブラリが core を吐きます.(^_^;

CVS の 1.8, 1.9 の両方で ext/tk/sample/tktextio.rb として
ほおり込んでありますので,良かったらお試しください.
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai@ai.kyutech.ac.jp

In This Thread

Prev Next