IO
Rubyでオブジェクトを使用するための適切な「コントラクト」またはベストプラクティスについて疑問に思っています。
IOオブジェクトを渡すヘルパーメソッドがたくさんあります。現在、IOオブジェクトを消費する私の低レベルのメソッドについては、をrewind
実行した後にそれらを確認しますread
。これは気持ちがいいです。オブジェクトの変更を気にせずに、これらのメソッドを複数回呼び出すことができIO
ます。
契約の可能性は次のとおりです。
上記のように...メソッドがオブジェクトを呼び出す場合(または別の方法
read
でIO
オブジェクトから読み取る場合)、完了したらrewind
それを行う必要があります。IO
これにより、オブジェクトが効果的に元の状態に復元されます。これは、引数を変更しないというRubyの規則によって動機付けられています。呼び出し元のメソッドは、低レベルのメソッドが呼び出し中であることを認識し、
read
それに応じて調整する必要があります。(別の言い方をすれば、消費者は注意してください!)
もしあれば、どれが一番いいですか?なんで?
(簡単な補足: 。io_copy = io.dup
と同じようには機能しませんio.rewind
。)
そして...スレッドセーフについて話すなら、ボーナスポイントに値します!