rust - 无法在Rust中显示struct的显示

标签 rust

我一直沿Rust by Example跟踪,但无法实现该结构的调试输出(以下代码中的Matrix)。
首先,这里是版本;

  • 操作系统:macOS 11
  • Rust:rustc 1.49.0(e1884a8e3 2020-12-29)
  • cargo : cargo 1.49.0(d00d64df9 2020-12-05)

  • 当我尝试执行“Tuples”步骤的"Activity" section的第一项 Activity 时所要求的内容;

    "Add the fmt::Display trait to the Matrix struct in the above example"


    我通过 cargo 创建了一个新的Rust项目,并创建了这样的结构;
    $ROOT
    ├- Cargo.toml
    └- src
       ├- main.rs
       └- mytuples2.rs
    
    // src/main.rs
    
    mod mytuples2;
    
    fn main() {
        mytuples2::run();
    }
    
    // src/mytuples2.rs
    
    use std::fmt;
    
    // The following struct is for the activity.
    #[derive(Debug)]
    struct Matrix(f32, f32, f32, f32);
    
    impl fmt::Display for Matrix {
      fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "(({}) ({})\n ({})({}))", self.0, self.1, self.2, self.3)
      }
    }
    
    pub fn run() {
      let matrix = Matrix(1.1, 1.2, 2.1, 2.2);
      println!("{:?}", matrix);
    }
    
    但无法产生以下输出;
    ((1.1) (1.2)
     (2.1) (2.2))
    
    我究竟做错了什么?我是新手,请帮帮我。谢谢。
    PS:而是写Matrix(1.1, 1.2, 2.1, 2.2)

    最佳答案

    尽管是我的错,我还是要回答。
    在结构定义之前删除#[derive(Debug)]并将impl更改为impl fmt::Debug for Matrix {(与impl fmt::Display for Matrix {相对)解决了该问题。
    无需将"{:?}"更改为"{}",目的是以调试格式打印结构。

    关于rust - 无法在Rust中显示struct的显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65820256/

    相关文章:

    rust - 如何在不释放缓冲区本身的情况下释放 Rust 在 FFI 缓冲区顶部分配的所有结构?

    rust - 如何使用 Serde 只允许一个字段或另一个字段?

    rust - 在 C 库的回调函数中使用对类型参数的引用

    if-statement - 结果和 if/else/return 语句 E0308 错误

    rust - 在 Rust 中使用 Trait 的泛型类型不匹配

    testing - 如何让 Cargo Test 漂亮地打印失败输出

    rust - 如何将 *const 指针转换为 Vec 以正确删除它?

    vector - 有没有办法将 ChunkMut<T> 从 Vec::chunks_mut 转换为切片 &mut [T]?

    rust - 如何忽略 .gitignore 中的 Rust 可执行文件?

    rust - 如何创建一个全局的、可变的单例?