Несколько имен в одной пометке в Rust
Для одной структуры часто нужны сразу несколько стандартных трейтов: напечатать значение, сравнить с другим и скопировать. Каждое имя можно было бы записать отдельной строкой над типом, но длиннее получается один список в одной пометке.
Несколько имен пишут в одной пометке через запятую. Компилятор по очереди допишет выполнение каждого трейта из списка:
#[derive(Debug, Clone, PartialEq, Eq)]
struct User {
name: String,
age: i32,
}
fn main() {
let original = User {
name: String::from("ann"),
age: 20,
};
let twin = original.clone();
println!("{:?}", twin);
println!("{}", original == twin);
}
Сначала на экране строка отладки с полями,
затем "true" от сравнения. Порядок
имен в списке на результат не влияет,
главное - не забыть все нужные трейты
сразу.
Для структуры только из чисел иногда добавляют и копирование при записи рядом с явной копией:
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let p = Point { x: 3, y: 4 };
let q = p;
println!("{:?} {}", q, p == q);
}
Дана структура:
struct User {
name: String,
age: i32,
}
Запишите одну пометку с печатью, явной
копией и двумя именами равенства. Выведите
копию форматом {:?} и результат
== с исходным значением.
Дана структура:
struct Pair {
left: i32,
right: i32,
}
Подключите в одном списке печать, копирование при записи, явную копию и равенство. Присвойте значение второй переменной и выведите обе строки отладки.
Скажите, чем один список имен в одной пометке удобнее нескольких строк над типом.