Я хотел бы сохранить ссылку на 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>>>`
Какой подход здесь подходит?