Левая часть =>
должна быть шаблоном, и несколько выражений также являются допустимыми шаблонами, что не относится к выражению вызова. Однако именованные константы могут быть сопоставлены, поэтому вы можете сделать это:
fn main() -> Result<(), Box<std::error::Error>> {
let num = 0;
const MAX: u64 = u64::max_value();
match num {
MAX => println!("Is u64::max_value()"),
_ => println!("Is boring")
}
Ok(())
}
Ссылка на игровую площадку
Это также имеет преимущество, позволяющее компилятору проверять, является ли ваше сопоставление исчерпывающим (какие паттерны не ):
const fn true_fn() -> bool { true }
fn main() -> Result<(), Box<std::error::Error>> {
let num = true;
const TRUE: bool = true_fn();
match num {
TRUE => println!("Is u64::max_value()"),
false => println!("Is boring")
}
Ok(())
}
Ссылка на игровую площадку