Ключевое слово self
Ключевое слово self в Rust обозначает текущий экземпляр
структуры, перечисления или типа, для которого вызывается метод.
Оно используется в сигнатурах методов для указания получателя
(self, &self, &mut self) и внутри тела метода
для доступа к полям и другим методам этого экземпляра.
Также self применяется в путях модулей для обозначения
текущего модуля.
Синтаксис
// В сигнатуре метода
fn method(self) { ... }
fn method(&self) { ... }
fn method(&mut self) { ... }
// В теле метода
self.field
self.other_method()
// В путях модулей
self::function()
Пример
Давайте создадим структуру Point и реализуем для неё
метод distance_to_origin, который использует &self
для доступа к полям:
struct Point
{
x: f64,
y: f64,
}
impl Point
{
fn distance_to_origin(&self) -> f64
{
(self.x * self.x + self.y * self.y).sqrt()
}
}
fn main()
{
let p = Point { x: 3.0, y: 4.0 };
let res = p.distance_to_origin();
println!("{}", res);
}
Результат выполнения кода:
5
Пример
Давайте рассмотрим метод, который принимает &mut self
и изменяет поля структуры:
struct Counter
{
count: i32,
}
impl Counter
{
fn increment(&mut self)
{
self.count += 1;
}
}
fn main()
{
let mut c = Counter { count: 0 };
c.increment();
c.increment();
println!("{}", c.count);
}
Результат выполнения кода:
2
Пример
Давайте рассмотрим метод, который принимает self
по значению и потребляет экземпляр:
struct Message
{
text: String,
}
impl Message
{
fn into_text(self) -> String
{
self.text
}
}
fn main()
{
let msg = Message { text: String::from("abcde") };
let res = msg.into_text();
println!("{}", res);
}
Результат выполнения кода:
"abcde"