Ассоциированные функции
Ассоциированные функции - это функции, которые связаны с определённой структурой, но не являются её методами. Они объявляются внутри блока 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 и связаны с типом