私は様々なファイル形式から特定のオブジェクトを読み込み/デコードする特性を作り出しています。この特性は、内側リーダーオブジェクトのための一般的なstd::io::Read
クラスを有する。私はファイルを開き、それを使用する便利なfrom_filename
コンストラクタを作ろうとしています。しかし、私はそれを動作させるように見えることはできません。ファイル構造体は読み込みを実装するものとして見なされませんか?
use std::io::Read;
use std::fs;
use std::path::Path;
trait MyObjectReader {
type R: Read;
fn new(Self::R) -> Self;
fn from_filename(filename: &str) -> Self where Self: Sized {
let open_file = fs::File::open(&Path::new(filename)).unwrap();
Self::new(open_file)
}
// other methods will go here
}
そして、私はこのエラーを取得する:
rustc 1.15.1 (021bd294c 2017-02-08)
error[E0308]: mismatched types
--> <anon>:14:19
|
14 | Self::new(open_file)
| ^^^^^^^^^ expected associated type, found struct `std::fs::File`
|
= note: expected type `<Self as MyObjectReader>::R`
= note: found type `std::fs::File`
私は.unwrap()
は、ライブラリ内のサブパーで、私はそれを後で変更でしょうね
これはコードです。
std::fs::File
はstd::io::Read
を実装していないため、このエラーを理解できません。私の心にはうまくいくはずです。
'File :: open(&Path :: new(filename))'は冗長です。 'File :: open(filename)'で十分です。 – Shepmaster