Keyword as[−][src]
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 _ 则建议使用 the same: 这些方法使意图更清晰。
as 还用于重命名 use 和 extern crate 语句中的导入:
use std::{mem as memory, net as network}; // 现在,您可以使用名称 `memory` 和 `network` 来引用 `std::mem` 和 `std::net`。Run
有关 as 的功能的更多信息,请参见 Reference。