Rustでファイル操作をするときにpreludeとuseするのが気になったので、備忘録として残します。
コード
以下のコードはファイルを読み込んでprintする
use std::fs;
use std::path::Path;
use std::io;
use std::io::prelude::*;
use std::io::BufReader;
fn main() {
cat().unwrap_or_else(|why| panic!(why));
}
fn cat() -> io::Result<()> {
let path_name = "takoyaki.txt";
let path = &Path::new(path_name);
let f = fs::File::open(path)?;
for result in BufReader::new(f).lines() {
let l = result?;
println!("{}", l);
}
Ok(())
}
これなら問題なく動きます。
もしuse std::io::prelude::*;を記述しなければ以下のようなエラーになる
error[E0599]: no method named `lines` found for struct `std::io::BufReader<std::fs::File>` in the current scope
--> src/main.rs:17:42
|
17 | for (i, result) in BufReader::new(f).lines().enumerate() {
| ^^^^^ method not found in `std::io::BufReader<std::fs::File>`
|
= help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope; perhaps add a `use` for it:
|
1 | use std::io::BufRead;
|
回避方法は以下の2つのうちのどちらかを記述すればOkです。
- use std::io::prelude::*;
- use std::io::BufRead;