問題タブ [interior-mutability]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 複数の「エンコーダー」間で変更可能なライターを共有するにはどうすればよいですか?
私はデータ圧縮インターフェースを実装しています:
エンコーダーは、出力がストリーム (ファイル)、バイト バッファー、さらには別のエンコーダーである可能性がある、ある種の出力で何らかの数値をエンコードできます。次のように実装を呼び出すことができます。
これで問題ありませんが、場合によっては、同じ出力ストリームに対して複数のエンコーダーが必要になります。次のようなもの(簡略化):
ここでは、2 つのエンコーダーが書き込み中にデータをインターリーブします。
&mutこれには、同じファイルへの変更可能なアクセスが必要ですが、これは直接参照では不可能です。私が知る限り、これを達成する唯一の方法はRefCell;を使用することです。より良い方法はありますか?
私が知る限り、これによりすべてのエンコーダーの実装がクリーンではなくなります。現在、エンコーダーは次のように宣言できます。
を使用するRefCellと、すべてのエンコーダー構造体とコンストラクターが を処理する必要がありますがRc<RefCell<W>>、これはそれほど適切ではなく、ライターの共有性がエンコーダーにリークします。エンコーダーは、ライターが共有されていることを知る必要はありません。
NumericEncoder(ライター引数を取るようにトレイトを変更できるかどうかを検討しましたが、これは である必要があります。一部のエンコーダーは ではなく別の にstd::io::Write書き込むため、これは機能しません。)std::io::WriteNumericEncoder