rust|rust打印自定义对象

没错,我也在学习rust语言 背景 我在学习rust的时候,在想,rust如何像python一样,可以打印一个对象呢?
就像是python里面的__str__或者__repr__
代码 摸索

struct User { active: bool, username: String, email: String, sign_in_count: u64, }fn main() { let mut arr2 = vec![ User { email: String::from("@.com"), username: String::from("小黄"), active: false, sign_in_count: 1, }, ]; arr2.push(User { email: String::from("@.com"), username: String::from("小李"), active: true, sign_in_count: 3, }); // 打印一下内容 for value in arr2 { println!("{:?}", value); } }

上面代码运行,发现不通过:
rust|rust打印自定义对象
文章图片

我在println!里面都加了:?怎么还不通过。具体我也不清楚。
后来我在想:rust是否可以像python那样,只要对对象实现了__str__或者__repr__方法,就可以打印了。
果然,去谷歌了一下,就找到了答案:
解决办法
我参考了这个链接:https://stackoverflow.com/questions/30253422/how-to-print-structs-and-arrays
【rust|rust打印自定义对象】User实现了一个方法: std::fmt::Display
完整代码如下:
struct User { active: bool, username: String, email: String, sign_in_count: u64, }impl std::fmt::Display for User { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "show result---> active: {}, username: {}, email: {}, count: {}", self.active, self.username, self.email, self.sign_in_count) } }fn main() { let mut arr2 = vec![ User { email: String::from("@.com"), username: String::from("小黄"), active: false, sign_in_count: 1, }, User { email: String::from("@.com"), username: String::from("小花"), active: true, sign_in_count: 2, }, ]; arr2.push(User { email: String::from("@.com"), username: String::from("小李"), active: true, sign_in_count: 3, }); // 打印一下内容 for value in arr2 { println!("{}", value); } }

上面的代码运行结果如下:
rust|rust打印自定义对象
文章图片

参考链接
  1. https://stackoverflow.com/questions/30253422/how-to-print-structs-and-arrays
  2. https://kaisery.github.io/trpl-zh-cn/ch08-01-vectors.html
  3. https://kaisery.github.io/trpl-zh-cn/ch05-01-defining-structs.html
个人感受
  1. 目前主要是使用python和R。也在学习一点点C++,rust。
  2. 感觉这个rust写起来和python差不多呀,尤其是构建数据结构的时候(目前还没对rust的模式设计了解过)。rust写起来也很轻松,感觉不怎么像是c++这么“拗口”。

    推荐阅读