Expand description
在类型之间进行转换,或重命名导入。
as
最常用于将原始类型转换为其他原始类型,但它还有其他用途,包括将指针转换为地址、地址转换为指针以及将指针转换为其他指针。
let thing1: u8 = 89.0 as u8;
assert_eq!('B' as u32, 66);
assert_eq!(thing1 as char, 'Y');
let thing2: f32 = thing1 as f32 + 10.5;
assert_eq!(true as u8 + thing2 as u8, 100);
Run通常,任何可以通过指定类型执行的强制转换也可以使用 as
完成,因此,除了编写 let x: u32 = 123
之外,您还可以编写 let x = 123 as u32
(注意:在这种情况下,let x: u32 = 123
最好)。
但是,在另一个方向上并非如此。
显式使用 as
可以允许更多隐式不允许的强制转换,例如更改裸指针的类型或将闭包转换为裸指针。
as
可以被视为 From
和 Into
的原语: as
仅适用于原语 (u8
、bool
、str
、指针等),而 From
和 Into
也适用于 String
或 Vec
等类型。
当可以推断目标类型时,as
也可以与 _
占位符一起使用。请注意,这可能会导致推理中断,通常,此类代码应使用显式类型以确保清晰度和稳定性。
使用 as *const _
或 as *mut _
转换指针时,这是最有用的,尽管 as *const _
推荐使用 cast
方法,而 as *mut _
则建议使用 同样的: 这些方法使意图更清晰。
as
还用于在 use
和 extern-crate
语句中重命名导入:
use std::{mem as memory, net as network};
// 现在,您可以使用名称 `memory` 和 `network` 来引用 `std::mem` 和 `std::net`。
Run有关 as
的功能的更多信息,请参见 Reference。