19 高级特征
我们将在这一章学习更多高级功能
19.3 高级类型
Rust类型系统有一些我们曾经提到过但是没有深入的功能。我们将在这一节讨论,为什么newtype与类型一样有用,类型别名是什么,!类型和动态大小类型又是什么
为了安全和抽象而使用newtype模式
newtype模式用于一些我们还未讨论的功能,主要包括:
1.静态的确保某值不被混淆、用来表示一个值的单元
如:Millimeters 和 Meters结构体都在newtype中封装了u32值,如果编写了一个有Millimeters类型参数的函数,不小心使用Meters或普通u32值来调用该函数的程序是不能编译的
2.抽象一些类型的实现细节
如封装类型可以暴露出直接使用其内部私有类型时所不同的公有API,以限制其功能
3.隐藏其内部的泛型类型
如,可以提供一个封装了HashMap<i32,String>的People类型,用来存储人名以及相应的ID。 使用People的代码只需与提供的公有API交互即可,比如向People集合增加名字字符串的方法,这样这些代码就无需知道在内部我们将一个i32 ID赋予这个名字了。newtype模式是一种实现隐藏实现细节的封装的轻量级方法
类型别名用来创建类型同义词
fn main() {
type Kilometers = i32;
let x:i32 = 5;
let y:Kilometers = 5;
println!("x+y={}",x+y)
}
同义词