РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
512 of 1245 menu

Приёмник &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,
    который описывает методы структур
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить