当前位置: 首页 > news >正文

Rust 语言入门(一):打印与格式化输出

对于初学者来说,掌握 Rust 的基本 I/O 操作是入门的第一步。本篇博客将介绍 Rust 语言的打印机制,包括基本的 print!println! 宏,格式化输出方式,并探讨其底层原理。

Rust 的基本打印

在 Rust 中,最常见的输出方式是使用 println!print! 宏。

fn main() {println!("Hello, world!");
}

println!print!

  • println!:带换行符的输出,相当于 C 语言的 printf("...\n");
  • print!:不带换行符,需要手动添加 \n

示例:

fn main() {print!("Hello, ");println!("world!");
}

输出:

Hello, world!

格式化输出

Rust 提供了强大的格式化输出功能,通过 {} 占位符实现。常见的格式化方式有:

1. 基本格式化

fn main() {let name = "Rust";let version = 1.73;println!("{} is a systems programming language. Version: {}", name, version);
}

输出:

Rust is a systems programming language. Version: 1.73

2. 位置参数

fn main() {println!("{1} is better than {0}!", "C", "Rust");
}

输出:

Rust is better than C!

3. 具名参数

fn main() {println!("{language} is fun!", language="Rust");
}

输出:

Rust is fun!

4. 指定格式

Rust 支持各种格式控制,如二进制、十六进制、科学计数法等。

fn main() {let num = 42;println!("Binary: {:b}, Hex: {:x}, Octal: {:o}", num, num, num);
}

输出:

Binary: 101010, Hex: 2a, Octal: 52

5. 指定宽度和对齐

  • 右对齐(默认):
println!("{:>10}", "Rust");

输出:

      Rust
  • 左对齐:
println!("{:<10}", "Rust");

输出:

Rust      
  • 填充字符:
println!("{:*>10}", "Rust");

输出:

******Rust

6. 浮点数格式化

fn main() {let pi = 3.1415926;println!("Pi to 2 decimal places: {:.2}", pi);
}

输出:

Pi to 2 decimal places: 3.14

Debug 格式化输出

Rust 提供 {:?} 进行 Debug 格式输出,适用于调试。

fn main() {let tuple = (1, "Rust", 3.14);println!("{:?}", tuple);
}

输出:

(1, "Rust", 3.14)

对于复杂数据结构,可以使用 {:#?} 进行美化输出。

fn main() {let numbers = vec![1, 2, 3, 4, 5];println!("{:#?}", numbers);
}

输出:

[1,2,3,4,5,
]

Display vs Debug

如果一个结构体希望支持 println!,需要实现 DisplayDebug

Debug 仅适用于调试

#[derive(Debug)]
struct Person {name: String,age: u8,
}fn main() {let p = Person { name: "Alice".to_string(), age: 30 };println!("{:?}", p); // 自动实现 `Debug`
}

Display 自定义格式

Display 需要手动实现:

use std::fmt;struct Person {name: String,age: u8,
}impl fmt::Display for Person {fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {write!(f, "{} is {} years old", self.name, self.age)}
}fn main() {let p = Person { name: "Alice".to_string(), age: 30 };println!("{}", p);
}

输出:

Alice is 30 years old

原理解析

Rust 的 println! 是一个宏,而非函数。这意味着:

  1. 编译时解析:Rust 编译器会在编译期解析 println! 并展开代码,确保类型安全。
  2. 自动格式检查:Rust 不允许格式不匹配,比如 println!("{}", 42, 43); 会编译报错。
  3. 零开销抽象:格式化操作会在编译时尽可能优化,保证高效性。

总结

  • println!print! 是 Rust 的基本输出宏。
  • {} 用于格式化输出,支持参数位置、宽度控制、进制转换等。
  • Debug{:?})适用于调试,Display 可自定义格式化。
  • println! 作为宏,提供编译时检查和高效性。

Rust 的打印与格式化机制既强大又安全,掌握这些基本概念有助于提高代码的可读性和可维护性。希望这篇文章对你有所帮助,欢迎留言交流!

相关文章:

Rust 语言入门(一):打印与格式化输出

对于初学者来说&#xff0c;掌握 Rust 的基本 I/O 操作是入门的第一步。本篇博客将介绍 Rust 语言的打印机制&#xff0c;包括基本的 print!、println! 宏&#xff0c;格式化输出方式&#xff0c;并探讨其底层原理。 Rust 的基本打印 在 Rust 中&#xff0c;最常见的输出方式…...

vue3.x 的 toRef详细解读

在 Vue 3.x 中&#xff0c;toRef 是一个用于创建响应式引用的工具函数。它可以将一个响应式对象的某个属性转换为一个独立的 ref 对象&#xff0c;同时保持与原始属性的响应式连接。以下是 toRef 的详细解读和示例。 1. toRef 的作用 核心功能 toRef 用于从响应式对象&#x…...

wordpress资讯类网站整站打包

wordpress程序&#xff0c;内置了价值499元的模板.但是有了模板没有全自动采集相信大多数人都搞不懂&#xff0c;目录那么多&#xff0c;全靠原创几乎是不可能的事情&#xff0c;除非你是大公司&#xff0c;每人控制一个板块&#xff0c; 这套源码里面最有价值的应该是这个采集…...

GitHub基本操作及Git简单命令

GitHub简介 GitHub就是一个远程仓库&#xff0c;远程仓库可以理解为就是一个可以保存自己代码的地方&#xff0c;在实际开发当中一个项目往往是有多个人来共同协作开发完成的&#xff0c;那么就需要一个统一代码保存的地方&#xff0c;而GitHub就是起到一个共享和汇总代码的作…...

记一次MySQL故障解决

记一次MySQL故障解决 1 故障现象2 故障排查2.1 查看MySQL服务状态2.2 查看服务日志 3 解决方法3.1 增加 wait_timeout 和 interactive_timeout 参数的值&#xff0c;确保连接不会因超时而被关闭&#xff1a;3.2 检查服务已经恢复正常&#xff0c;不过以上只是临时修改&#xff…...

DeepSeek-R1私有化部署教程 | Linux服务器搭建AI大语言模型

**云服务器用LinuxDockerOllamaOpenWebUI部署DeepSeek-R1大语言模型&#xff08;LLMs&#xff09;&#xff0c;DeepSeek本地化部署教程&#xff08;在自己电脑上部署也可以参考此教程&#xff09;。**超详细教程&#xff0c;手把手。 在当今数字化时代&#xff0c;大型语言模型…...

「软件设计模式」桥接模式(Bridge Pattern)

深入解析桥接模式&#xff1a;解耦抽象与实现的艺术 一、模式思想&#xff1a;正交维度的优雅解耦 桥接模式&#xff08;Bridge Pattern&#xff09;通过分离抽象&#xff08;Abstraction&#xff09;与实现&#xff08;Implementation&#xff09;&#xff0c;使二者可以独立…...

【Flink快速入门-5.流处理之多流转换算子】

流处理之多流转换算子 实验介绍 前面实验中介绍的算子已经能够满足我们的大部分开发需求了&#xff0c;但是在实际工作中有时候还会遇到一些业务场景&#xff0c;例如需要摄入多个输入流并将其合并处理&#xff0c;或者需要将一条输入流分割为多条子流&#xff0c;在不同的子…...

react传递函数与回调函数原理

为什么 React 允许直接传递函数&#xff1f; 回调函数核心逻辑 例子&#xff1a;父组件控制 Modal 的显示与隐藏 // 父组件 (ParentComponent.tsx) import React, { useState } from react; import { Modal, Button } from antd; import ModalContent from ./ModalContent;co…...

华为云kubernetes基于keda自动伸缩deployment副本(监听redis队列长度)

1 概述 KEDA&#xff08;Kubernetes-based Event-Driven Autoscaler&#xff0c;网址是https://keda.sh&#xff09;是在 Kubernetes 中事件驱动的弹性伸缩器&#xff0c;功能非常强大。不仅支持根据基础的CPU和内存指标进行伸缩&#xff0c;还支持根据各种消息队列中的长度、…...

Spring源码分析のBean扫描流程

文章目录 前言一、scanCandidateComponents1.1 isCandidateComponent1.1.1、排除/包含过滤器1.1.2、条件装配1.1.3、重载一1.1.4、重载二1.1.5、补充&#xff1a;Lookup注解 总结 前言 原生的Spring在构造ApplicationContext时&#xff0c;会调用refresh方法。其中就包含了扫描…...

Ubuntu安装docker:docker-desktop : 依赖: docker-ce-cli 但无法安装它、无法定位软件包 docker-ce-cli

具体错误 sudo apt-get install ./docker-desktop-amd64.deb [sudo] password for weiyu: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 注意&#xff0c;选中 docker-desktop 而非 ./docker-desktop-amd64.de…...

基于大数据的奥运会获奖数据分析系统设计与实现

【大数据】基于大数据的奥运会获奖数据分析系统设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统通过集成先进的数据抓取、处理、存储与可视化技术&#xff0c;为深入理解奥运会…...

数据结构 堆和priority_queue

一、堆的定义 堆&#xff08;heap&#xff09;&#xff0c;是⼀棵有着特殊性质的完全⼆叉树&#xff0c;可以⽤来实现优先级队列&#xff08;priorityqueue&#xff09;。 堆需要满⾜以下性质&#xff1a; 1. 是⼀棵完全⼆叉树&#xff1b; 2. 对于树中每个结点&#xff0c;如…...

Dockerfile 编写推荐

一、导读 本文主要介绍在编写 docker 镜像的时候一些需要注意的事项和推荐的做法。 虽然 Dockerfile 简化了镜像构建的过程&#xff0c;并且把这个过程可以进行版本控制&#xff0c;但是不正当的 Dockerfile 使用也会导致很多问题。 docker 镜像太大。如果你经常使用镜像或者…...

【抽象代数】1.2. 半群与群

群的定义 群非空集合二元运算性质 定义1. 设 为一个非空集合&#xff0c;上有二元运算&#xff0c;满足结合律&#xff0c;则称或为一个半群。 定义2. 设 为半群&#xff0c;若元素 满足 &#xff0c;则称 为 的左幺元&#xff08;右幺元&#xff1a;&#xff09;&#…...

Django中实现简单易用的分页工具

如何在Django中实现简单易用的分页工具&#xff1f;&#x1f4da; 嗨&#xff0c;小伙伴们&#xff01;今天我们来看看如何在 Django 中实现一个超简单的分页工具。无论你是在处理博客文章、产品列表&#xff0c;还是用户评论&#xff0c;当数据量一大时&#xff0c;分页显得尤…...

「软件设计模式」装饰者模式(Decorator)

深入解析装饰者模式&#xff1a;动态扩展功能的艺术&#xff08;C实现&#xff09; 一、模式思想与应用场景 1.1 模式定义 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过将对象放入包含行为的特殊封装对象中&#xff0c;动态地…...

CI/CD(二)docker-compose安装Jenkins

1、docker-compose.yml version: 3.8services:jenkins:image: jenkins/jenkins:lts # 使用官方的 Jenkins LTS 镜像container_name: jenkinsuser: root # 如果需要以 root 用户运行ports:- "8080:8080" # Jenkins Web 界面端口- "50000:50000" # 用于 Jen…...

OpenCV机器学习(1)人工神经网络 - 多层感知器类cv::ml::ANN_MLP

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::ANN_MLP 是 OpenCV 库中的一部分&#xff0c;用于实现人工神经网络 - 多层感知器&#xff08;Artificial Neural Network - Multi-Layer…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...