《Rust语言圣经》Rust教程笔记5:2. Rust基础入门(2.2基本类型)2.2.2. Rust字符类型、Rust布尔类型、Rust单元类型()Rust无值、Rust空值

Rust 基本类型:字符、布尔与单元类型

项目地址:rust-course

教程在线阅读:Rust语言圣经(Rust Course)

2. Rust 基础入门

2.2. 基本类型

2.2.2. 字符、布尔、单元类型

字符类型(char)

字符,对于没有其它编程经验的新手来说可能不太好理解(没有编程经验敢来学 Rust 的绝对是好汉),但是你可以把它理解为英文中的字母,中文中的汉字。

下面的代码展示了几个颇具异域风情的字符:

fn main() {
    let c = 'z';
    let z = 'ℤ';
    let g = '国';
    let heart_eyed_cat = '😻';
}

如果大家是从有年代感的编程语言过来,可能会大喊一声:这 XX 叫字符?是的,在 Rust 语言中这些都是字符,Rust 的字符不仅仅是 ASCII,所有的 Unicode 值都可以作为 Rust 字符,包括单个的中文、日文、韩文、emoji 表情符号等等,都是合法的字符类型。Unicode 值的范围从 U+0000 ~ U+D7FFU+E000 ~ U+10FFFF。不过“字符”并不是 Unicode 中的一个概念,所以人在直觉上对“字符”的理解和 Rust 的字符概念并不一致。

由于 Unicode 都是 4 个字节编码,因此字符类型也是占用 4 个字节

fn main() {
    let x = '中';
    println!("字符'中'占用了{}字节的内存大小",std::mem::size_of_val(&x));
}

在这里插入图片描述

输出如下:

$ cargo run
   Compiling ...

字符'中'占用了4字节的内存大小

注意,我们还没开始讲字符串,但是这里提前说一下,和一些语言不同,Rust 只能用 '' 来表示字符, "" 是留给字符串的。

布尔(bool)

Rust 中的布尔类型有两个可能的值:truefalse,布尔值占用内存的大小为 1 个字节:

fn main() {
    let t = true;

    let f: bool = false; // 使用类型标注,显式指定f的类型

    if f {
        println!("这是段毫无意义的代码");
    }
}

使用布尔类型的场景主要在于流程控制,例如上述代码的中的 if 就是其中之一。

单元类型()(无值、空值)

单元类型就是 () ,对,你没看错,就是 () ,唯一的值也是 () ,一些读者读到这里可能就不愿意了,你也太敷衍了吧,管这叫类型?

只能说,再不起眼的东西,都有其用途,在目前为止的学习过程中,大家已经看到过很多次 fn main() 函数的使用吧?那么这个函数返回什么呢?

没错, main 函数就返回这个单元类型 (),你不能说 main 函数无返回值,因为没有返回值的函数在 Rust 中是有单独的定义的:发散函数( diverge function ),顾名思义,无法收敛的函数。

例如常见的 println!() 的返回值也是单元类型 ()

再比如,你可以用 () 作为 map 的值,表示我们不关注具体的值,只关注 key。 这种用法和 Go 语言的 struct{} 类似,可以作为一个值用来占位,但是完全不占用任何内存。

Rust 中的单元类型(Unit Type)用一对空括号 () 表示,代表一个零长度的元组(tuple)。单元类型只有一个可能的值,也用 () 表示。

单元类型的用途
1. 表示无返回值的函数

在 Rust 中,如果函数不返回任何有意义的值,那么它默认返回单元类型 ()。这类似于其他语言中的 void 类型。

fn do_something() {
    // 该函数实际返回了单元类型 `()`
}
2. 占位符

当需要一个类型但不关心其具体值时,可以使用单元类型作为占位符。例如,在泛型编程中,单元类型可以作为默认类型参数。

3. 实现特定的 Trait

如果你想为某个类型实现某个 trait,但又不需要存储任何数据,可以使用单元类型。

struct MyStruct;

impl SomeTrait for MyStruct {
    // 实现 trait 的方法
}
4. 控制流程结构:

在一些控制流程结构中,如 ifmatch 表达式,需要返回一个值时,可以使用单元类型。

// 测试代码
fn main() {
    let condition = true;
    let _result = if condition {
        // 做点什么
    } else {
        ()
    };
}

示例
fn main() {
    let x: () = (); // x 的类型是单元类型
    println!("x 的值是 {:?}", x); // 输出:x 的值是 ()
}

在这里插入图片描述

总结

单元类型在 Rust 中用于表示“无值”或“空值”,在函数返回类型、泛型占位符和控制流程中起到重要作用。它确保了 Rust 的类型系统的统一性,即使在没有实际值的情况下,也有一个明确的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dontla

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值