Отдельный тип с одним полем в Rust
Короткая запись структуры с одним полем
задает новый тип, даже если внутри лежит
обычное i32. Голое число в параметр
с таким именем не подставить: оболочка
вокруг числа собирает значение нового типа,
а к самому числу обращаются через поле
.0.
Здесь работает отдельная проверка. Функция,
которая ждет голый i32, не примет
значение оболочки, пока внутреннее поле
явно не извлекут. Так разводят, например,
идентификатор и индекс, хотя оба хранят
целое.
Посмотрим объявление оболочки и доступ к полю:
struct UserId(i32);
fn take(id: UserId) {
let _ = id;
}
fn main() {
let u = UserId(7);
take(u);
println!("{}", u.0);
}
Дан следующий код:
fn main() {
let n: i32 = 9;
println!("{}", n);
}
Объявите короткую структуру Tag
с одним i32 внутри, соберите
значение из n, выведите поле
.0.
Даны фрагменты:
fn print_plain(x: i32) {
println!("{}", x);
}
fn main() {
let wrapped = Meters(4);
}
Добавьте объявление Meters с одним
i32, передайте в print_plain
поле .0 от wrapped и
выведите число.
Дано число:
let num = 11;
Объявите Seat как короткую
структуру с i32, соберите
значение из литерала, сохраните в
переменной и выведите поле .0.