无法在 Rust 中为结构体实现 Display

5
我一直在跟随Rust by Example,但无法调试结构体(Matrix如下代码所示)。
首先,这里是版本信息:
  • 操作系统:macOS 11
  • Rust:rustc 1.49.0 (e1884a8e3 2020-12-29)
  • Cargo:cargo 1.49.0 (d00d64df9 2020-12-05)
当我尝试完成“元组”步骤中““活动”部分的第一个任务时,出现了问题:

“将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)


1
"{:?}" doesn't use Display it uses Debug, try just "{}" - kmdreko
感谢@kmdreko,你让我意识到了一些问题。请看答案。 - ozanmuyes
1个回答

4

虽然这是我的错,但是我来回答一下;

在结构体定义之前删除#[derive(Debug)]并将impl更改为impl fmt::Debug for Matrix {(而不是impl fmt::Display for Matrix {)可以解决它。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接