gpt4 book ai didi

file - 在 Rust 中写入文件或标准输出

转载 作者:行者123 更新时间:2023-11-29 07:47:26 25 4
gpt4 key购买 nike

我正在学习 Rust,但我有点不知所措。

我正在尝试为用户提供将输出写入标准输出或提供的文件名的选项。

我从为使用位于 hereextra::getopts 给出的示例代码开始。 .从那里开始,在 do_work 函数中,我尝试这样做:

use std::io::stdio::stdout;
use std::io::buffered::BufferedWriter;

fn do_work( input: &str, out: Option<~str> ) {
println!( "Input: {}", input );
println!( "Output: {}", match out {
Some(x) => x,
None => ~"Using stdout"
} );
let out_writer = BufferedWriter::new( match out {
// I know that unwrap is frowned upon,
// but for now I don't want to deal with the Option.
Some(x) => File::create( &Path::new( x ) ).unwrap(),
None => stdout()
} );
out_writer.write( bytes!( "Test output\n" ) );
}

但它输出以下错误:

test.rs:25:43: 28:6 error: match arms have incompatible types: expected `std::io::fs::File` but found `std::io::stdio::StdWriter` (expected struct std::io::fs::File but found struct std::io::stdio::StdWriter)
test.rs:25 let out_writer = BufferedWriter::new( match out {
test.rs:26 Some(x) => File::create( &Path::new( x ) ).unwrap(),
test.rs:27 None => stdout()
test.rs:28 } );
test.rs:25:22: 25:41 error: failed to find an implementation of trait std::io::Writer for [type error]
test.rs:25 let out_writer = BufferedWriter::new( match out {
^~~~~~~~~~~~~~~~~~~

但我不明白问题出在哪里,因为 FileStdWriter 都实现了 Writer Trait。有人可以解释我做错了什么吗?

谢谢!

最佳答案

自 2014 年以来,Rust 发生了很多变化,所以这是一个对我使用 Rust 1.15.1 的答案:

let out_writer = match out {
Some(x) => {
let path = Path::new(x);
Box::new(File::create(&path).unwrap()) as Box<dyn Write>
}
None => Box::new(io::stdout()) as Box<dyn Write>,
};

这与 @Arjan's answer 几乎相同,除了~Box取代,一些名字也变了。我要省略 BufferedWriter,但如果您需要,我相信它现在被命名为 BufWriter .

关于file - 在 Rust 中写入文件或标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com