для структур. Цель инвариант не должен быть нарушен.
В языках с эксепшнами в таком случае обычно бросают эксепшн.
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c704684c7b1f310ef3e1f630c92c9c12
rust
struct ZipCode(u32);
impl ZipCode {
pub fn new(zip: u32) -> Result<ZipCode, String> {
if zip >= 1000000 || zip < 10000 {
return Err(String::from("wrong length"));
}
Ok(ZipCode(zip))
}
}
fn main() {
let z = ZipCode::new(123456);
match z {
Err(_) => {
println!("wrong zip")
}
Ok(_) => {
println!("zip is correct")
}
}
}
дело обычное, но ошибку лучше сделать не покой, а отдельным типом
Вполне нормально, parse, don't validate
Спасибо. 👍 Было лень делать тип ошибки ради примера
прям бальзам на душу)
Обсуждают сегодня