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。我缺少什么吗?
您需要std::io::Write按照错误提示导入特征:
use std::io::Write;
Run Code Online (Sandbox Code Playgroud)
在 Rust 中,必须导入特征才能使用它们实现的方法。
它可以在网站“运行此代码”按钮上运行,但是当我尝试自己构建它时,出现编译器错误:
如果您指的是链接到的“关于打印性能的说明”,那么它确实包含use std::io::{self, Write};.