Структуры, перечисления и трейты
Rust Methods and impl Blocks
Attach behavior to a struct: methods with &self, changes with &mut self and constructors like new.
Что вы узнаете
- impl blocks
- &self and &mut self
- Associated functions
Receiver → what the method can do
fn area(&self)readfn scale(&mut self, f)changefn new(w, h) -> SelfcreateFunctions that belong to a type
An impl block holds the functions that belong to a type. A method takes self as its first parameter and is called with a dot. A function without self, such as new, is called with the type name and ::.
&self borrows the rectangle for reading and &mut self borrows it for changing, which is why rect must be mut to call scale. Self is a short name for the type of the impl block. new and square are associated functions used as constructors.
Главное
- &self reads the value.
- &mut self changes it.
Rectangle::newhas no self: it is a constructor.
Пример на Rust, который можно запустить
Rust
main.rs
struct Rectangle {
width: f64,
height: f64,
}
impl Rectangle {
fn new(width: f64, height: f64) -> Self {
Self { width, height }
}
fn square(size: f64) -> Self {
Self::new(size, size)
}
fn area(&self) -> f64 {
self.width * self.height
}
fn scale(&mut self, factor: f64) {
self.width *= factor;
self.height *= factor;
}
}
fn main() {
let mut rect = Rectangle::new(3.0, 4.0);
println!("area: {}", rect.area());
rect.scale(2.0);
println!("scaled: {} x {} = {}", rect.width, rect.height, rect.area());
println!("square: {}", Rectangle::square(5.0).area());
}
area: 12
scaled: 6 x 8 = 48
square: 25Практика
Откройте пример в онлайн-компиляторе, измените значение или добавьте строку и попробуйте предсказать вывод до запуска. Затем намеренно сломайте код и прочитайте сообщение компилятора.
Закончили этот урок?
Отметьте его как изученный, чтобы следить за прогрессом.
Ваш прогресс сохранён в этом браузере Войдите, чтобы он был доступен на всех устройствах.
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
- Правила банковского счёта Защитите баланс счёта с помощью правил пополнения и снятия, отклоняя недопустимые операции. Легко
- Distance Between Points Compute the straight-line distance between two points. Легко