Rust {:?} vs {} 知多少

news/2024/11/30 7:44:14/

Rust {:?} vs {} 知多少

{} 指示符

{} 需要实现std::fmt::Display

{:?} 指示符

{:?} 需要实现std::fmt::Debug

案例展示

struct Rectangle {width: u32,height: u32,
}fn main() {let rect1 = Rectangle {width: 30,height: 50,};println!("rect1 is {}", rect1);
}

编译报错:

error[E0277]: `Rectangle` doesn't implement `std::fmt::Display`

提示我们没有实现Display trait


改成如下代码:

fn main() {let rect1 = Rectangle {width: 30,height: 50,};println!("rect1 is {:?}", rect1);
}

编译报错:

error[E0277]: `Rectangle` doesn't implement `Debug`

提示没有实现Debug trait


通过上面报错提示,我们在实现struct时候要根据自己的需要来实现Display或者Debug Trait。

自定义实现Display trait

use std::fmt;
struct Rectangle {width: u32,height: u32,
}
impl fmt::Display for Rectangle{// This trait requires `fmt` with this exact signature.fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {// Write strictly the first element into the supplied output// stream: `f`. Returns `fmt::Result` which indicates whether the// operation succeeded or failed. Note that `write!` uses syntax which// is very similar to `println!`.write!(f, "{} {}", self.width,self.height)}
}
fn main() {let rect1 = Rectangle {width: 30,height: 50,};println!("rect1 is {}", rect1);
}

输出如下:

rect1 is 30 50

Debug Trait

#[derive(Debug)]
struct Person {name: String,age: u32,
}fn main() {let person = Person {name: String::from("Alice"),age: 30,};println!("Person: {:?}", person);println!("Person: {:#?}", person);
}

输出如下:

Person: Person { name: "Alice", age: 30 }
Person: Person {name: "Alice",age: 30,
}

一般我们可以通过#[derive(Debug)] 在编译阶段,编译器帮忙我们自动实现Debug trait。

总结

本文通过一些实例介绍了{:?} vs {} 的区别,以及实现Display和Debug Trait


http://www.ppmy.cn/news/368593.html

相关文章

linux 笔记本双显示器,Ubuntu设置笔记本电脑双显示器(linux)

转载地址:http://i.cn.yahoo.com/shiyufeng/blog/p_40/ 前端 原文做者:Lion app Ubuntu 8.04/8.10 设置笔记本电脑双显示器 目录: 一、设置显示分辨率及 xrandr 介绍 二、GNOME下切换双屏的方法 三、关于双屏下 GNOME面板/ wine / 阿里旺旺的…

Baumer工业相机堡盟工业相机如何通过BGAPISDK使用HDR功能(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK使用HDR功能(C#) Baumer工业相机Baumer工业相机BGAPISDK和HDR功能的技术背景Baumer工业相机通过BGAPISDK使用HDR功能1.引用合适的类文件2.通过BGAPISDK使用HDR高动态范围功能3.通过BGAPISDK关闭HDR高动态范围…

C++ 教程(08)——常量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。 常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量,只不过常量的值在定义后不能进行修改。 整数常量 …

设计优质微信小程序的实用指南!

微信小程序是一种快速发展的应用形式,设计良好的小程序能够提升用户体验并吸引更多的用户。在设计微信小程序时,有一些关键的指南可以帮助我们做出出色的设计。以下是即时设计总结的一些设计指南,希望能对准备设计微信小程序的人有所帮助。 …

目标检测数据集---交通信号数据集

1.数据集介绍 交通信号数据集,数据集大小:877张,类型为:speedlimit、crosswalk、trafficlight、stop 下载链接: 链接:https://pan.baidu.com/s/1rXMQjlw32vBNLXZIaiX3CA 提取码:af1l --来自…

普乐蛙VR科普教育体验馆VR航天模拟体验设备厂家

普乐蛙华夏方舟:VR多人互动体感VR设备搭配几十种观影内容,航天航空科普知识同时,还可以进行实时的互动游戏。高档材质座椅,振背、振臀、扫腿多功能体验,让科普场景体验更真实。操作便捷。 可选定制座椅,一次…

Unity Kinect体感跑酷互动游戏方案

面向着Kinect摄像头,当右下角出现黄色的人身想表明Kinect体感设备检测成功。玩家身体向左向右可以变换跑道,身体下蹲可以使得角色下滑,起跳则可以使得角色起跳。 经典的跑酷玩法,跑道的障碍物有矮墙,高墙,…