Приёмник self
Приёмник self - это первый параметр метода,
который указывает, как метод получает доступ
к экземпляру структуры. В Rust существует три
основных формы приёмника: self (владение),
&self (заимствование по ссылке) и
&mut self (изменяемое заимствование).
Выбор приёмника определяет, может ли метод
потреблять, читать или изменять экземпляр.
Синтаксис
impl StructName
{
fn method(self) { }
fn method(&self) { }
fn method(&mut self) { }
}
Пример
Давайте создадим структуру с тремя методами, использующими разные приёмники:
struct Point
{
x: i32,
y: i32,
}
impl Point
{
fn into_tuple(self) -> (i32, i32)
{
(self.x, self.y)
}
fn sum(&self) -> i32
{
self.x + self.y
}
fn shift(&mut self, dx: i32, dy: i32)
{
self.x += dx;
self.y += dy;
}
}
fn main()
{
let mut p = Point { x: 1, y: 2 };
println!("{}", p.sum());
p.shift(3, 4);
println!("{}", p.sum());
let t = p.into_tuple();
println!("{:?}", t);
}
Результат выполнения кода:
3
10
(4, 6)
Пример
Метод с приёмником self потребляет экземпляр,
поэтому после его вызова исходная переменная
становится недоступной:
struct Counter
{
value: i32,
}
impl Counter
{
fn consume(self) -> i32
{
self.value
}
}
fn main()
{
let c = Counter { value: 42 };
let v = c.consume();
println!("{}", v);
}
Результат выполнения кода:
42
Смотрите также
-
метод
self-ref,
который описывает заимствование через&self -
метод
self-mut,
который описывает изменяемое заимствование через&mut self -
метод
self-value,
который описывает владение черезself -
метод
methods,
который описывает методы структур в целом