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 专门为解决这个问题提供了 ? 操作符。
在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百卓Smart管理平台 uploadfile.php 文件上传漏洞(CVE-2024-0939)

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

(1)短距离(<10KM)

文章目录 1.1 Bluetooth 1.2 CUAV PW-Link 1.3 ESP8266 wifi telemetry 1.4 ESP32 wifi telemetry 1.5 FrSky telemetry 1.6 Yaapu双向遥测地面站 1.7 HOTT telemetry 1.8 MSP(MultiWii 串行协议)(4.1 版) 1.9 MSP (version 4.2) 1.10 SiK Radio v1 1.11 SiK Radio …

158基于matlab的用于分析弧齿锥齿轮啮合轨迹的程序

基于matlab的用于分析弧齿锥齿轮啮合轨迹的程序,输出齿轮啮合轨迹及传递误差。程序已调通,可直接运行。 158 matlab 弧齿锥齿轮啮合轨迹 传递误差 (xiaohongshu.com)

雨云宿迁云服务器测评

我本打算趁着暑假买台云服务器开mc服务器,但由于没有试用且直接完结导致白废20块钱。 在此提醒大家,买用于开mc服务器的云服务器前能试用一定要试用!不然鬼知道它性能够不够用! 服务器配置如下: cpu:2v gold61332.5Ghz ram:2GiB…

【C++】初识模板:函数模板和类模板

目录 一、模板函数 1、函数模板的概念 2、函数模板的格式 3、函数模板的原理 4、函数模板实例化 5、 模板参数的匹配原则 二、类模板 1 、类模板的定义格式 2 、类模板的实例化 3、模板类示例 一、模板函数 1、函数模板的概念 函数模板代表了一个函数家族&#xff0c…

【粉丝福利社】Flutter小白开发——跨平台客户端应用开发学习路线(文末送书-完结)

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主&#xf…

Bee+SpringBoot稳定的Sharding、Mongodb ORM功能(同步 Maven)

Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鸿蒙) Bee 小巧玲珑!仅 860K, 还不到 1M, 但却是功能强大! V2.2 (2024春节・LTS 版) 1.Javabean 实体支持继承 (配置 bee.osql.openEntityCanExtendtrue) 2. 增强批…

项目学习记录

项目开发 创建项目环境配置关联git新增模块项目启动打印地址日志使用httpclient进行idea内部控制台测试使用AOP拦截器打印日志 创建项目 创建一个空项目,并勾选下面选项 然后进入pom.xml中修改项目配置 根据这个链接选则,修改项目的支持版本 链接&#…

猫头虎分享已解决Bug || CPU过载(CPU Overload):HighCpuUsageWarning, CpuOverloadException

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

vue3 之 商城项目—一级分类

整体认识和路由配置 场景:点击哪个分类跳转到对应的路由页面,路由传对应的参数 router/index.js import { createRouter, createWebHashHistory } from vue-router import Layout from /views/Layout/index.vue import Home from /views/Home/index.vu…

linux 06 磁盘管理

01.先管理vm中的磁盘,添加一个磁盘 只有这种方式才可以增加/dev/sd* 中的目录 例如会增加一个sdc 第一步.vm软件,打开虚拟机设置,添加硬盘 第二步.选择推荐scsi 第三步.创建一个新的虚拟磁盘 第四步. 第五步. 02.在创建好的vm虚拟机中查…

automative

car sevice car-lib

html5+css3胶囊按钮代码

效果 代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title></title> <style> /* 胶囊开关的样式 */ .switch { position: relative; display: inline-block; width: 6…

【leetcode热题100】最大矩形

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [["1","0","1","0","0"],["1",&quo…

文件绕过-Unsafe Fileuoload

文件上传基础 什么是文件上传 将客户端数据以文件形式封装通过网络协议发送到服务器端&#xff0c;在服务器端解析数据&#xff0c;最终在服务端硬盘上作为真实的文件保存。 通常一个文件以HTTP协议进行上传时&#xff0c;将以POST请求发送至Web服务器&#xff0c;Web服务器…

1987-2022年各省进出口总额数据整理(含进口和出口)(无缺失)

1987-2022年各省进出口总额数据整理&#xff08;含进口和出口&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;1987-2022年 2、来源&#xff1a;各省年鉴、统计公报 3、指标&#xff1a;进出口总额&#xff08;万美元&#xff09;、进口总额&#xff08;万美…

2009-2019年地级市分类转移支付数据

2009-2019年地级市分类转移支付数据 1、时间&#xff1a;2009-2019年 2、来源&#xff1a;整理自wind 3、指标&#xff1a;公共财政收入:返还性收入、公共财政收入:一般性转移支付收入、公共财政收入:专项转移支付收入 4、范围&#xff1a;280个地级市 5、指标解释&#x…

Windows - URL Scheme - 在Windows上无管理员权限为你的程序添加URL Scheme

Windows - URL Scheme - 在Windows上无管理员权限为你的程序添加URL Scheme What 想不想在浏览器打开/控制你的电脑应用&#xff1f; 比如我在浏览器地址栏输入wegame://后回车会提示是否打开URL:wegame Portocol。 若出现了始终允许选项&#xff0c;你甚至可以写一个Web界面…

高效测试利器:Jmeter+Ant+Jenkins定时监控接口揭秘!

基于JmeterantJenkins的接口性能监控框架 Jenkins的安装和配置 简介 部署到持续集成平台可以实现脚本的定时运行&#xff0c;这是接口测试的核心。 这里我们选用了jenkins,jenkins是一个强大的持续集成系统&#xff0c;使用起来也很简单。 使用步骤如下&#xff1a; 1、 安装…

Redis核心技术与实战【学习笔记】 - 23.Redis 主从切换故障,有哪些坑

前言 Redis 的主从同步机制不仅可以让从库服务更多的读请求&#xff0c;分担主库的压力&#xff0c;而且还能在主库发生故障时&#xff0c;进行主从库切换&#xff0c;提供高可靠服务。 不过&#xff0c;在实际使用主从机制时会踩到一些“坑”&#xff1a;主从数据不一致、读…