根据rust文档和IDE中浏览到的代码(vscode),Write
trait是由std::io::Stdout
和&Stdout
(docs)实现的。但是,当我试图编译代码时,我得到了错误:
mode.handle_stmt(&mut out, stmt, &line_lookup))
----------- ^^^^^^^^ the trait `std::fmt::Write` is not implemented for `Stdout`
| |
| required by a bound introduced by this call
|
= help: the following other types implement trait `std::fmt::Write`:
&mut W
Formatter<'_>
OsString
serde::de::format::Buf<'a>
std::net::display_buffer::DisplayBuffer<SIZE>
std::string::String
note: required by a bound in `Modes::handle_stmt`
其中模式实现:
pub(super) trait Mode {
fn name() -> &'static str;
fn handle_stmt<W: std::fmt::Write>(
w: W,
stmt: REPLStmt<Decl, Expr, Import>,
line_lookup: &::line_col::LineColLookup,
) -> Result<(), &'static str>;
}
有人知道这里发生了什么事吗?我能做些什么来解决它?
1条答案
按热度按时间icnyk63a1#
发现问题,我没有正确阅读:
std::io::Stdout
实现了std::io::Write
,我期待的是std::fmt::Write
,它不仅仅是一个再出口。通过将我的trait更改为使用
io::Write
,并在被调用方法的其他示例中使用Vec<u8>
而不是String
,解决了这个问题。