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

Ассоциированные функции

Ассоциированные функции - это функции, которые связаны с определённой структурой, но не являются её методами. Они объявляются внутри блока impl и не принимают self в качестве первого параметра. Такие функции вызываются через имя типа с использованием синтаксиса Тип::функция. Ассоциированные функции часто используются в качестве конструкторов, например, для создания нового экземпляра структуры. Параметрами функция принимает любые значения, необходимые для её логики, но не экземпляр структуры.

Синтаксис

impl StructName { fn function_name(params) -> ReturnType { // тело функции } }

Пример

Давайте создадим структуру Point и ассоциированную функцию new, которая создаёт новую точку с заданными координатами:

struct Point { x: i32, y: i32, } impl Point { fn new(x: i32, y: i32) -> Point { Point { x, y } } } fn main() { let p = Point::new(3, 5); println!("x: {}, y: {}", p.x, p.y); }

Результат выполнения кода:

x: 3, y: 5

Пример

Ассоциированные функции могут возвращать не только экземпляр своей структуры, но и другие значения. Давайте создадим функцию, которая возвращает расстояние от начала координат до заданной точки:

struct Point { x: f64, y: f64, } impl Point { fn origin() -> Point { Point { x: 0.0, y: 0.0 } } fn distance_from_origin(x: f64, y: f64) -> f64 { (x * x + y * y).sqrt() } } fn main() { let dist = Point::distance_from_origin(3.0, 4.0); println!("{}", dist); let p = Point::origin(); println!("x: {}, y: {}", p.x, p.y); }

Результат выполнения кода:

5 x: 0, y: 0

Смотрите также

  • ключевое слово impl,
    которое используется для определения ассоциированных функций
  • методы методы,
    которые принимают self и вызываются на экземпляре структуры
  • ключевое слово Self,
    которое обозначает тип, для которого реализуется блок impl
  • константы ассоциированные константы,
    которые также определяются внутри impl и связаны с типом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить