rust 特性'std::fmt::Write'在应该实现时没有为'Stdout'实现

yfwxisqw  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(153)

根据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>;
}

有人知道这里发生了什么事吗?我能做些什么来解决它?

icnyk63a

icnyk63a1#

发现问题,我没有正确阅读:std::io::Stdout实现了std::io::Write,我期待的是std::fmt::Write,它不仅仅是一个再出口。
通过将我的trait更改为使用io::Write,并在被调用方法的其他示例中使用Vec<u8>而不是String,解决了这个问题。

相关问题