Приёмник &self
Приёмник &self используется в методах структур для передачи
экземпляра по неизменяемой ссылке. Такой метод получает доступ
к полям структуры только для чтения и не забирает владение
экземпляром. Параметром метод принимает ссылку на текущий
экземпляр структуры, которая автоматически подставляется
при вызове через точку.
Синтаксис
impl StructName
{
fn method_name(&self)
{
// тело метода
}
}
Пример
Давайте создадим структуру Point с полями x и y
и добавим метод sum, который принимает &self
и возвращает сумму координат:
struct Point
{
x: i32,
y: i32,
}
impl Point
{
fn sum(&self) -> i32
{
self.x + self.y
}
}
fn main()
{
let p = Point { x: 2, y: 3 };
let res = p.sum();
println!("{}", res);
}
Результат выполнения кода:
5
Пример
Метод с приёмником &self не забирает владение,
поэтому экземпляр можно использовать повторно после вызова:
struct Point
{
x: i32,
y: i32,
}
impl Point
{
fn sum(&self) -> i32
{
self.x + self.y
}
}
fn main()
{
let p = Point { x: 2, y: 3 };
let res1 = p.sum();
let res2 = p.sum();
println!("{} {}", res1, res2);
}
Результат выполнения кода:
5 5
Пример
Давайте создадим структуру Rectangle и метод area
с приёмником &self, который вычисляет площадь:
struct Rectangle
{
width: u32,
height: u32,
}
impl Rectangle
{
fn area(&self) -> u32
{
self.width * self.height
}
}
fn main()
{
let rect = Rectangle { width: 4, height: 5 };
let res = rect.area();
println!("{}", res);
}
Результат выполнения кода:
20
Пример
Приёмник &self можно комбинировать с дополнительными
параметрами метода. Давайте передадим коэффициент:
struct Rectangle
{
width: u32,
height: u32,
}
impl Rectangle
{
fn area_scaled(&self, k: u32) -> u32
{
self.width * self.height * k
}
}
fn main()
{
let rect = Rectangle { width: 4, height: 5 };
let res = rect.area_scaled(2);
println!("{}", res);
}
Результат выполнения кода:
40
Смотрите также
-
приёмник
self-ref,
который передаёт экземпляр по неизменяемой ссылке -
приёмник
self-mut,
который передаёт экземпляр по изменяемой ссылке -
приёмник
self-value,
который забирает владение экземпляром -
раздел
methods,
который описывает методы структур