当前位置: 首页 > 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 的打印与格式化机制既强大又安全,掌握这些基本概念有助于提高代码的可读性和可维护性。希望这篇文章对你有所帮助,欢迎留言交流!

相关文章:

  • Transformer 模型介绍(四)——编码器 Encoder 和解码器 Decoder
  • DeepSeek应用-一秒对书本要点分析并创建思维脑图
  • Java并发编程——AQS原理解析
  • MobaXterm中文版安装使用教程-附安装包
  • 使用 Spring Boot 和 Canal 实现 MySQL 数据库同步
  • 1997-2019年各省进出口总额数据
  • Android 中使用 FFmpeg 进行音视频处理
  • Spring Boot三:Springboot自动装配原理
  • Java中Map循环安全的删除数据的4中方法
  • Qt5开发入门指南:从零开始掌握跨平台开发
  • ZYNQ TCP Server PS端千兆网口速率低问题,要修改BSP中LWIP配置参数
  • 英语---基础词汇库
  • Nginx 负载均衡实战:构建高效稳定的 Web 服务
  • 【C#零基础从入门到精通】(二十六)——C#三大特征-多态详解
  • 腾讯的webUI怎样实现deepseek外部调用 ; 腾讯云通过API怎样调用deepseek
  • 解密全同态加密中的自举(Bootstrapping)
  • 【PCIe 总线及设备入门学习专栏 1.1 -- PCI 设备访问方法】
  • JUC并发—5.AQS源码分析一
  • cap5:YoloV5分割任务的TensorRT部署指南(python版)
  • Arkts和Typescript语法上差别
  • 武汉网站建设网站/seo深圳优化
  • 做网站怎么导入地图/网络营销方案ppt
  • 工程公司名字/长沙网站优化效果