Keyword as

source ·
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 可以被视为 FromInto 的原语: as 仅适用于原语 (u8boolstr、指针等),而 FromInto 也适用于 StringVec 等类型。

当可以推断目标类型时,as 也可以与 _ 占位符一起使用。请注意,这可能会导致推理中断,通常,此类代码应使用显式类型以确保清晰度和稳定性。 使用 as *const _as *mut _ 转换指针时,这是最有用的,尽管 as *const _ 推荐使用 cast 方法,而 as *mut _ 则建议使用 同样的: 这些方法使意图更清晰。

as 还用于在 useextern-crate 语句中重命名导入:

use std::{mem as memory, net as network};
// 现在,您可以使用名称 `memory` 和 `network` 来引用 `std::mem` 和 `std::net`。
Run

有关 as 的功能的更多信息,请参见 Reference