Rust 格式化输出

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、format! 宏
  • 二、fmt::Debug
  • 三、fmt::Display
  • 四、? 操作符 循环打印


前言

Rust学习系列-本文根据教程学习Rust的格式化输出,包括fmt::Debugfmt::Display等。


一、format! 宏

在 Rust 中,可以使用 format! 宏来进行格式化输出。这个宏类似于其他编程语言中的 printf 或者 sprintf 函数。

以下是一个简单的例子:

fn main() {let name = "Alice";let age = 25;let height = 165.5;let formatted = format!("Name: {}, Age: {}, Height: {:.2}", name, age, height);println!("{}", formatted);
}

这个例子中,我们使用了 format! 宏来创建一个格式化的字符串。在字符串中通过 {} 占位符来指定需要替换的值,并且可以使用 : 来指定格式化选项,比如使用 :.2 来保留小数点后两位。

然后我们使用 println! 宏来输出格式化后的字符串。

输出结果为:

Name: Alice, Age: 25, Height: 165.50

除了使用 format! 宏,还可以使用其他的格式化宏,比如 println!eprintln! 用于标准输出和标准错误输出。

二、fmt::Debug

rust fmt::Debug 是 Rust 标准库中的一个 trait,用于控制如何格式化数据类型的输出。它可以被任何实现了 std::fmt::Debug trait 的类型使用。

std::fmt::Debug trait 提供了一个 fmt 方法,该方法接受一个实现了 std::fmt::Debug trait 的数据类型,并将其格式化为一个字符串。可以使用 {} 占位符来表示要格式化的数据,并使用 :? 格式化符号来表示数据类型的 Debug 格式输出。

使用 std::fmt::Debug trait 的主要目的是为了调试目的,因为它提供了一个格式化的输出,可以使开发人员更容易地了解数据类型的内部结构和值。

下面是一个示例代码,展示了如何使用 std::fmt::Debug trait:

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

在上面的示例中,Person 结构体实现了 std::fmt::Debug trait,并使用 #[derive(Debug)] 注解来自动实现它。在 main 函数中,我们创建了一个 Person 对象并使用 println! 宏来打印它。{:?} 是一个格式化占位符,它会调用 std::fmt::Debug trait 的 fmt 方法来打印 person 对象的 Debug 格式输出。

在这里插入图片描述

三、fmt::Display

在Rust中,fmt::Display是一个trait(特征),用于定义如何格式化类型的输出。该trait包含一个名为fmt的方法,它接受一个fmt::Formatter对象,并返回一个fmt::Result对象。

通过实现fmt::Display trait,你可以指定自定义类型的输出格式,以便在使用println!和format!宏时能够以预期的方式打印该类型的实例。例如:

use std::fmt;struct Point {x: i32,y: i32,
}impl fmt::Display for Point {fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {write!(f, "({}, {})", self.x, self.y)}
}fn main() {let p = Point { x: 1, y: 2 };println!("The point is {}", p); // 输出:The point is (1, 2)
}

在上面的例子中,我们为自定义的Point类型实现了fmt::Display trait。在fmt方法中,我们使用write!宏向Formatter对象f写入格式化的内容。

通过这种方式,你可以根据自定义类型的属性和需求,定义自己的输出格式。

在这里插入图片描述

四、? 操作符 循环打印

对一个结构体实现 fmt::Display,其中的元素需要一个接一个地处理到,这可能会很麻烦。问题在于每个 write! 都要生成一个 fmt::Result。正确的实现需要处理所有的 Result。Rust 专门为解决这个问题提供了 ? 操作符。
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/461566.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web Services 服务 是不是过时了?创建 Web Services 服务实例

Web Services 是不是过时了? 今天是兔年最后一天,先给大家拜个早年 。 昨天上午视频面试一家公司需要开发Web Services 服务,这个也没有什么,但还需要用 VB.net 开发。这个是多古老的语言了,让我想起来了 10年 前 写 …

【RT-DETR改进涨点】更加聚焦的边界框损失Focaler-IoU、InnerFocalerIoU(二次创新)

一、本文介绍 本文给大家带来的改进机制是更加聚焦的边界框损失Focaler-IoU已经我进行二次创新的InnerFocalerIoU同时本文的内容支持现阶段的百分之九十以上的IoU,比如Focaler-IoU、Focaler-ShapeIoU、Inner-Focaler-ShapeIoU包含非常全的损失函数,边界框的损失函数只看这一…

vue3+vite+ts 配置commit强制码提交规范配置 commitlint

配置 git 提交时的 commit 信息,统一提交 git 提交规范 安装命令: npm install -g commitizen npm i cz-customizable npm i commitlint/config-conventional commitlint/cli -D 文件配置 根路径创建文件 commitlint.config.js module.exports {// 继承的规…

江科大STM32 终

目录 SPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件外设读写W25Q64 BKP备份寄存器、PER电源控制器、RTC实时时钟11.0 Unix时间戳代码示例:读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR电源控制12.1 PWR简介代码示例:修改主频12.3 串…

位运算 二进制中1的个数

求n的第k位数字: n >> k & 1 返回n的最后一位1&#xff1a;lowbit(n) n & -n 二进制中1的个数 C代码实现: #include<iostream> using namespace std; const int N1000002; int lowbit(int x){return x&-x; } int a[N]; int main(){int n;cin>>…

【Linux】进程学习(二):进程状态

目录 1.进程状态1.1 阻塞1.2 挂起 2. 进程状态2.1 运行状态-R进一步理解运行状态 2.2 睡眠状态-S2.3 休眠状态-D2.4 暂停状态-T2.5 僵尸状态-Z僵尸进程的危害 2.6 死亡状态-X2.7 孤儿进程 1.进程状态 1.1 阻塞 阻塞&#xff1a;进程因为等待某种条件就绪&#xff0c;而导致的…

Spring Boot + 七牛OSS: 简化云存储集成

引言 Spring Boot 是一个非常流行的、快速搭建应用的框架&#xff0c;它无需大量的配置即可运行起来&#xff0c;而七牛云OSS提供了稳定高效的云端对象存储服务。利用两者的优势&#xff0c;可以为应用提供强大的文件存储功能。 为什么选择七牛云OSS? 七牛云OSS提供了高速的…

电商小程序05用户注册

目录 1 搭建页面2 设置默认跳转总结 我们上一篇拆解了登录功能&#xff0c;如果用户没有账号就需要注册了。本篇我们介绍一下注册功能的实现。 1 搭建页面 打开应用&#xff0c;点击左上角的新建页面 输入页面的名称&#xff0c;用户注册 删掉网格布局&#xff0c;添加表单容…

maven-install-plugin:2.4:install (default-cli) on project ability-dispatch:

IDEA&#xff0c;instal时报错 &#xff0c;错误 信息如下&#xff1a; Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-cli) on project ability-dispatch: The packaging for this project did not assign a file to the buil…

Unity3d Shader篇(六)— BlinnPhong高光反射着色器

文章目录 前言一、BlinnPhong高光反射着色器是什么&#xff1f;1. BlinnPhong高光反射着色器的工作原理2. BlinnPhong高光反射着色器的优缺点优点缺点 3. 公式 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数 三…

K8S之标签的介绍和使用

标签 标签定义标签实操1、对Node节点打标签2、对Pod资源打标签查看资源标签删除资源标签 标签定义 标签就是一对 key/value &#xff0c;被关联到对象上。 标签的使用让我们能够表示出对象的特点&#xff0c;比如使用在Pod上&#xff0c;能一眼看出这个Pod是干什么的。也可以用…

加固平板电脑丨三防智能平板丨工业加固平板丨智能城市管理

随着智能城市的不断发展&#xff0c;人们对于城市管理的要求也在不断提高&#xff0c;这就需要高效、智能的城市管理平台来实现。而三防平板就是一款可以满足这一需求的智能设备。 三防平板是一种集防水、防尘、防摔于一体的智能平板电脑&#xff0c;它可以在复杂的环境下稳定运…