3
私はRustに全く新しいです。私はドキュメントを読んでいて、基本的なファイルI/Oコードを車として使って学習するのを手伝っています。Vecを返す関数を書くには<Path>?
次はコンパイルされません:コンパイルエラーで
use std::path::Path;
use std::fs;
use std::io;
pub fn read_filenames_from_dir<P>(path: P) -> Result<Vec<Path>, io::Error>
where P: AsRef<Path>
{
let paths = try!(fs::read_dir(path));
Ok(paths.unwrap())
}
を:
error: the trait `core::marker::Sized` is not implemented for the type `[u8]` [E0277]
は私が渡されていますPath
内部Path
のコレクションを返すために、この関数を記述する必要がありますどのように?
:
戻り値の型を変更した後、あなたは正しくご希望の種類を作成するためのイテレータの結果をマッピングする必要がありますか?ソースコードダイビングをすると、 'Path'に' sys :: os_str :: Slice'という名前のものが含まれている 'OsStr'が含まれています。実際の定義は見つかりません。私はそれが基本的に '' [u8] ''の上の抽象化のいくつかの層だと思いますか? – LinearZoetrope
@Jsor *基本的に、[u8] *上のいくつかの抽象レイヤー - はい、[Unix風のプラットフォームでは](https://github.com/rust-lang/rust/blob/1.8.0/src/libstd /sys/unix/os_str.rs#L27-L29)。 Windowsは異なります(https://github.com/rust-lang/rust/blob/1.8.0/src/libstd/sys/windows/os_str.rs#L46-L48)。この抽象化のビットは、OPエラーメッセージで漏出します。「 '' core :: marker :: Sized''は '[u8]' ''型に対して実装されていません。 – Shepmaster