2012-02-13 8 views
3

私はRuby(1.9)でファイルのようなクラスを実装したいと思いますが、そのすべてのメソッドを再実装したり、 StringIOクラスとIOクラスが提供します。私がそれを手伝ってくれるモジュールがありますか?私はread()メソッドを提供し、無料でread()を使用してreadLines()メソッドを取得したいと考えています。Rubyでファイル/ IOのようなクラスを簡単に実装する方法を探してください

これは、Comparableモジュールは<は、<===>=、および>は限り<=>として実装されている事業者を追加する方法と同様です。私はファイルのようなものを探します。

私が正しく覚えていれば、Javaおよび/またはApache Commonsは次のように動作します。基本的に1つまたは2つのメソッドがあり、他はすべて読み取り/書き込みに使用されます。

私はすべての書き込みでSHA256ダイジェストを透過的に更新する書き込み可能なFileおよびStringIOオブジェクトのラッパーを実装しています。

答えて

2

あなたはIOを継承したくない場合、あなたはおそらくカーネル、特にopengetsreadlineまたはreadlinesのその実装のメソッドを使用するようにするつもりです。

デバッグされたあらかじめ書かれたコードを捨ててしまっています。個人的には、私はIOをサブクラス化し、 "読み込み"と "書き込み"タイプのルーチンをいくつかの安全な名前にエイリアスし、オリジナルを呼び出して書き込みを行う新しいバージョンを作成し、SHA256を更新します。

+0

IOとStringIOから継承しているのは、結果を非シーク可能にするためにどのメソッドを上書きしなければならないか分かっていれば、すべての文字列 'write'が' SHA256#update'メソッドを経由します。私はちょうど自分自身のすべての方法を飾る必要はありません。 –

+0

カーネルメソッドの使用はオプションではありません。なぜなら、それらは引数の不足に応じてグローバル変数を使用するからです。 –

2

すでに「ラッパークラス」を実装していると言われているので、Decorator Patternを使用することをお勧めします。 を使用してパターンを実装する場合は、ダイジェスト計算に必要な書き込みメソッドのみを実装します。実装では、デコレートされたオブジェクトに書き込みを委譲し、SHA256 Digestインスタンスを書き込まれたStringで更新します。

+0

私はパターンを知っています。私は〜10メソッドを飾る必要はありません。また、明らかに私は "返品価値について私のSHA256を行う"ことができません。 'IO#write'メソッドは元の文字列ではなく、"書き込まれたバイト数 "をうれしく返します。あなたの答えのその部分は-1です。おそらくあなたはそれを改善したり、間違った部分を削除したりすることができます。 –

+0

これはRubyのデコレータパターンの全体的なポイントです。たとえば、すべてのメソッドをデコレートする必要はありません。 「method_missing」の実装です。ダイジェストを更新する必要がある場所を実装するだけです。あなたが最初に読書について話していたので、私はIOから読んだときの戻り値を意味しました。私はその部分を修正します。 – emboss

+0

Undid -1。私はそれを見ると、 '' ''、 '' puts''、 '' puts''、 '' syswrite''、 '' write''を装飾していて、期待。私はそれが、 'def method_missing m、* a;を使ってやり遂げられている文字列であると仮定することはできません。 @sha << a [0]; @ dec.send m、* a;終わり。または私はできますか? –

関連する問題