一、前言
上一篇文章中,介绍了rust中强大的trait,因此本文就来使用一下这些常用的、且需要自己手动实现的trait来完成一些功能,也就是类型转换与迭代器。
首先我们从较为复杂的类型转换讲起。
rust相比于C/C++,最让人惊艳的便是它的自动类型推导,比如当你写下面这条语句时:
let a=10;
rust编译器将能够自动推导出a的类型为i32,因为字面量10的值就是i32。
当然,这个特性在C/C++中可以使用auto关键字实现,包括本文要介绍的类型转换,C/C++同样也可以实现、甚至可能更加方便(比如强制转换?)。
但rust能够通过人为指定返回值类型来推断函数返回值类型在C/C++中却是无法实现的(也就是本文要介绍的功能)。
包括rust提供了安全性保证、其类型相当直观、即使是枚举类型也能实现方法进行任意类型转换,加上其简练优雅的语法,在体验上C/C++真的很难与之相比。
二、基本理解
类型转换在我的感知中,最实用的一个功能其实是枚举类型:
enum Test {
One,
Two,
Three,
}
比如上面这个枚举类型,当我们想要将其作为字符串输出时,一般可能就得这样做:
fn main() {
let v = Test::One;
let str = match v {
Test::One => "One",
Test::Two => "Two",
Test::Three => "Three",
};
println!("{}", str);
}
这样做当然是可以的,只不过不够简练优雅。