我想在结构中存储对io::Write
特征对象的引用,Option
但我不知道如何。我可以像这样直接放入参考:
pub struct Parameters<'a> {
pub log: &'a (io::Write + 'a),
// Other elements removed
}
然后从(例如)BufWriter
这样分配它:
let logstream = &BufWriter::new(f);
let parameters = Parameters {
log: logstream, // Other elements removed
};
这可行,但我希望它logstream
是可选的。如果我尝试:
pub struct Parameters<'a> {
pub log: Option<&'a(io::Write + 'a)>,
// Other elements removed
}
和
let logstream = match f {
Some(f) => Some(&BufWriter::new(f)),
None => None,
};
let parameters = Parameters {
log: logstream,
// Other elements removed
};
我得到:
error[E0308]: mismatched types
--> src/main.rs:17:14
|
17 | log: logstream,
| ^^^^^^^^^ expected trait std::io::Write, found struct `std::io::BufWriter`
|
= note: expected type `std::option::Option<&dyn std::io::Write>`
found type `std::option::Option<&std::io::BufWriter<std::vec::Vec<u8>>>`
这里有什么合适的方法?