rust实战系列三:Prelude

在这里插入图片描述

Rust的代码从逻辑上是分cratemod管理的。所谓crate大家可以理解为“项 目”。

每个crate是一个完整的编译单元,它可以生成为一个lib或者exe可执行文件。

而在crate内部,则是由mod这个概念管理的,所谓mod大家可以理解为namespace

我们可以使用use语句把其他模块中的内容引入到当前模块中来。关于Rust模块系统 的详细说明,可参见本书第五部分。

Rust有一个极简标准库,叫作std,除了极少数嵌入式系统下无法使用标准库之 外,绝大部分情况下,我们都需要用到标准库里面的东西。为了给大家减少麻烦, Rust编译器对标准库有特殊处理。默认情况下,用户不需要手动添加对标准库的依 赖,编译器会自动引入对标准库的依赖。除此之外,标准库中的某些type、trait、 function、macro等实在是太常用了。

每次都写use语句确实非常无聊,因此标准库提 供了一个std::prelude模块,在这个模块中导出了一些最常见的类型、trait等东 西,编译器会为用户写的每个crate自动插入一句话:

   use std::prelude::*;

这样,标准库里面的这些最重要的类型、trait等名字就可以直接使用,而无须 每次都写全称或者use语句。

Prelude模块的源码在src/libstd/prelude/文件夹下。我们可以看到,目前的mod.rs 中,直接导出了v1模块中的内容,而v1.rs中,则是编译器为我们自动导入的相关 trait和类型。

Format格式详细说明

在后面的内容中,我们还会大量使用println!宏,因此提前介绍一下这个宏的

基本用法。跟C语言的printf函数类似,这个宏也支持各种格式控制,示例如下:

  fn main() {
    println!("{}", 1);
    println!("{:o}", 9);
    println!("{:x}", 255);
    println!("{:X}", 255);
    println!("{:p}", &0);
    println!("{:b}", 15);
    println!("{:e}", 10000f32);
    println!("{:E}", 10000f32);
// 默认用法,打印Display // 八进制
// 十六进制 小写
// 十六进制 大写
// 指针
// 二进制
// 科学计数(小写) // 科学计数(大写)
// 打印Debug println!("{a} {b} {b}", a = "x", b = "y"); // 命名参数
}

Rust中还有一系列的宏,都是用的同样的格式控制规则,如format!write! writeln!等。

详细文档可以参见标准库文档中std::fmt模块中的说明。

Rust标准库中之所以设计了这么一个宏来做标准输出,主要是为了更好地错误 检查。大家可以试试,如果出现参数个数、格式等各种原因不匹配会直接导致编译 错误。而函数则不具备字符串格式化的静态检查功能,如果出现了不匹配的情况, 只能是运行期错误。这个宏最终还是调用了std::io模块内提供的一些函数来完成 的。

如果用户需要更精细地控制标准输出操作,也可以直接调用标准库来完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

断水流大撕兄

你的鼓励,就是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值