Приведение ссылок as
Оператор as в Rust используется для явного приведения типов,
включая приведение ссылок между совместимыми типами. При работе
со ссылками as позволяет преобразовывать ссылку на один тип
в ссылку на другой тип, если между этими типами существует
допустимое преобразование. Чаще всего это применяется для
приведения ссылок к указателям, для изменения изменяемости ссылки,
а также для приведения ссылок на массивы к ссылкам на срезы.
Параметром оператора является целевой тип, к которому нужно
привести исходное значение.
Синтаксис
let res = value as TargetType;
Пример
Давайте приведём ссылку на массив к ссылке на срез:
fn main()
{
let arr: [i32; 5] = [1, 2, 3, 4, 5];
let slice: &[i32] = &arr as &[i32];
println!("{:?}", slice);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте приведём изменяемую ссылку к неизменяемой ссылке:
fn main()
{
let mut x: i32 = 42;
let mut_ref: &mut i32 = &mut x;
let immut_ref: &i32 = mut_ref as &i32;
println!("{}", immut_ref);
}
Результат выполнения кода:
42
Пример
Давайте приведём ссылку к сырому указателю:
fn main()
{
let x: i32 = 42;
let r: &i32 = &x;
let ptr: *const i32 = r as *const i32;
unsafe {
println!("{}", *ptr);
}
}
Результат выполнения кода:
42
Пример
Давайте приведём изменяемую ссылку к сырому изменяемому указателю:
fn main()
{
let mut x: i32 = 10;
let r: &mut i32 = &mut x;
let ptr: *mut i32 = r as *mut i32;
unsafe {
*ptr = 20;
println!("{}", *ptr);
}
}
Результат выполнения кода:
20