Сборка значения типа в Rust
В блоке типа можно записать функцию без получателя. Она не привязана к уже готовому значению, а сама собирает новое и возвращает его. Возвращаемый тип часто пишут как имя типа внутри блока, а вызов идет через двойное двоеточие после имени типа.
Запишем функцию, которая собирает пользователя из имени и возраста:
struct User {
name: String,
age: i32,
}
impl User {
fn new(name: String, age: i32) -> Self {
User { name, age }
}
}
Соберем значение через эту функцию:
let user = User::new(String::from("ann"), 20);
println!("{}", user.age);
На экране 20. В переменной лежит
структура с переданными полями. К полям
обращаются через точку, как у литерала.
Имя такой функции часто начинают с new,
но это обычная функция уровня блока: у нее
нет точки перед именем и нет получателя.
Дальше к готовому значению можно вызывать
методы с общей или изменяемой ссылкой.
Дана структура:
struct User {
name: String,
age: i32,
}
Запишите функцию new с двумя параметрами,
которая возвращает готовое значение. Соберите
пользователя с именем "kate" и возрастом
19 и выведите оба поля.
Дана структура:
struct Tag {
code: i32,
label: String,
}
Добавьте функцию new с кодом и подписью,
создайте значение с 5 и текстом
"ok" и выведите поле label.
Скажите, чем вызов через двойное двоеточие отличается от вызова метода через точку у переменной.