Блок impl
Блок impl используется для реализации методов и связанных функций для структуры. Внутри этого блока определяются функции, которые могут принимать экземпляр структуры (методы) или не принимать его (связанные функции). Блок impl связывает код с конкретным типом, позволяя вызывать методы через экземпляр структуры или через саму структуру.
Синтаксис
impl StructName
{
// methods and associated functions
}
Пример
Давайте создадим структуру Point и реализуем для неё метод new, который создаёт новый экземпляр, и метод distance, который вычисляет расстояние от точки до начала координат:
struct Point
{
x: f64,
y: f64,
}
impl Point
{
fn new(x: f64, y: f64) -> Point
{
Point { x, y }
}
fn distance(&self) -> f64
{
(self.x * self.x + self.y * self.y).sqrt()
}
}
fn main()
{
let p = Point::new(3.0, 4.0);
let res = p.distance();
println!("{}", res);
}
Результат выполнения кода:
5
Пример
Давайте реализуем для структуры Counter метод increment, который увеличивает значение счётчика на 1:
struct Counter
{
count: u32,
}
impl Counter
{
fn new() -> Counter
{
Counter { count: 0 }
}
fn increment(&mut self)
{
self.count += 1;
}
}
fn main()
{
let mut c = Counter::new();
c.increment();
c.increment();
println!("{}", c.count);
}
Результат выполнения кода:
2
Смотрите также
-
структура
struct,
которая определяет пользовательский тип данных -
методы
methods,
которые определяются внутри блока impl -
связанные функции
associated functions,
которые не принимают self -
ключевое слово
Self,
которое ссылается на текущий тип внутри impl