无法在 Rust 中实现结构的显示

oza*_*yes 5 rust

我一直在按照Rust 示例进行操作,但无法实现结构的调试输出(Matrix在下面的代码中)。

\n

首先,这是版本;

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

当我尝试执行 “元组”步骤的“活动”部分的第一个活动所要求的操作时;

\n
\n

“将 fmt::Display 特征添加到上面示例中的 Matrix 结构中”

\n
\n

我通过 Cargo 创建了一个新的 Rust 项目并创建了这样的结构;

\n
$ROOT\n\xe2\x94\x9c- Cargo.toml\n\xe2\x94\x94- src\n   \xe2\x94\x9c- main.rs\n   \xe2\x94\x94- mytuples2.rs\n
Run Code Online (Sandbox Code Playgroud)\n
// src/main.rs\n\nmod mytuples2;\n\nfn main() {\n    mytuples2::run();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

\n
// src/mytuples2.rs\n\nuse std::fmt;\n\n// The following struct is for the activity.\n#[derive(Debug)]\nstruct Matrix(f32, f32, f32, f32);\n\nimpl fmt::Display for Matrix {\n  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n    write!(f, "(({}) ({})\\n ({})({}))", self.0, self.1, self.2, self.3)\n  }\n}\n\npub fn run() {\n  let matrix = Matrix(1.1, 1.2, 2.1, 2.2);\n  println!("{:?}", matrix);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但无法产生以下输出;

\n
((1.1) (1.2)\n (2.1) (2.2))\n
Run Code Online (Sandbox Code Playgroud)\n

我究竟做错了什么?请帮助我,因为我是新手。谢谢。

\n

PS:相反,它写的是Matrix(1.1, 1.2, 2.1, 2.2)

\n

oza*_*yes 4

尽管这是我的错,我还是要回答;

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

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