Rust 教程代码中出现“错误[E0599]:未找到名为 write_fmt 的方法”错误

Huw*_*ers 7 macros command-line-interface traits rust rust-macros

我正在尝试使用而writeln!()不是println!()宏写入标准输出,因此我可以优雅地处理 I/O 错误(例如,当我将长时间运行的输出通过管道传输到 时head)。我在https://rust-cli.github.io/book/tutorial/output.html#a-note-on-printing-performance找到了以下代码片段,包含在错误处理函数中:

use std::io;

fn main() {
    if let Err(error) = run() {
        eprintln!("{}", error);
    }
}

fn run() -> Result<(), io::Error> {
    let stdout = io::stdout(); // get the global stdout entity
    let mut handle = io::BufWriter::new(stdout); // wrap that handle in a buffer
    writeln!(handle, "foo: {}", 42)?; // add ? if you care about errors here
    return Ok(());
}
Run Code Online (Sandbox Code Playgroud)

它可以在网站“运行此代码”按钮上运行,但是当我尝试自己构建它时,出现编译器错误:

use std::io;

fn main() {
    if let Err(error) = run() {
        eprintln!("{}", error);
    }
}

fn run() -> Result<(), io::Error> {
    let stdout = io::stdout(); // get the global stdout entity
    let mut handle = io::BufWriter::new(stdout); // wrap that handle in a buffer
    writeln!(handle, "foo: {}", 42)?; // add ? if you care about errors here
    return Ok(());
}
Run Code Online (Sandbox Code Playgroud)

继续“该方法可用于...”提示,我尝试将其包装BufWriter在 a 中Box,但这没有任何区别。

我正在使用 Rust 2018。我缺少什么吗?

Val*_*tin 7

您需要std::io::Write按照错误提示导入特征:

use std::io::Write;
Run Code Online (Sandbox Code Playgroud)

在 Rust 中,必须导入特征才能使用它们实现的方法。


它可以在网站“运行此代码”按钮上运行,但是当我尝试自己构建它时,出现编译器错误:

如果您指的是链接到的“关于打印性能的说明”,那么它确实包含use std::io::{self, Write};.