隐式转换
Rust 不会在类型间自动应用 隐式转型 (不像 C++)。你可以在类似这样的程序中看到这一点:
fn multiply(x: i16, y: i16) -> i16 { x * y } fn main() { let x: i8 = 15; let y: i16 = 1000; println!("{x} * {y} = {}", multiply(x, y)); }
Rust 的整数类型都实现了 From<T>
和 Into<T>
trait,让我们可以进行转换。From<T>
trait 只有一个 from()
方法,类似地,Into<T>
trait 也只有一个方法 into()
。一个类型通过实现这些 trait 表达它如何转换为另外一种类型。
标准库有一个 From<i8> for i16
实现,这意味着我们可以通过调用 i16::from(x)
,将一个 i8
类型的变量 x
转换为一个 i16
类型变量。或者,更简单地,使用 x.into()
,因为 From<i8> for i16
实现会自动创建一个 Into<i16> for i8
实现。
这同样适用于你自己类型的 From
实现,因此仅实现 From
即可自动获得相应的 Into
实现。
-
执行上面的程序并查看编译器错误。
-
更新上面的代码,使用
into()
来做转换。 -
更改
x
和y
为其它类型(比如f32
,bool
,i128
)来看看你可以将什么类型转为哪些其它类型。尝试将小类型转换为大类型,然后反过来试试。查看标准库文档来看看From<T>
是否在你检查的类型对之间有实现。