【问题标题】:Cannot impl Display for struct in Rust无法在 Rust 中为 struct 实现显示
【发布时间】:2021-01-21 02:11:05
【问题描述】:

我一直在关注Rust by Example,但无法实现结构的调试输出(下面代码中的Matrix)。

首先,这是版本;

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

当我尝试执行“元组”步骤的"Activity" section 的第一个活动时所要求的内容时;

"将 fmt::Display trait 添加到上例中的 Matrix 结构中"

我通过 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)

【问题讨论】:

  • "{:?}" 不使用Display 它使用Debug,试试"{}"
  • 谢谢@kmdreko,你让我意识到了一些事情。请看答案。

标签: rust


【解决方案1】:

尽管是我的错,我还是会回答;

在结构定义之前删除 #[derive(Debug)] 并将 impl 更改为 impl fmt::Debug for Matrix {(而不是 impl fmt::Display for Matrix {)解决了这个问题。

无需将"{:?}" 更改为"{}",因为目的是以调试格式打印结构体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多