0
点赞
收藏
分享

微信扫一扫

通过例子学Rust_Rust问号表达式练习

cwq聖泉寒江2020 2022-09-11 阅读 320

原文在这 下面代码源于原文,但有改动。

mod checked {
    #[derive(Debug)]
    pub enum MathError {
        DivisionByZero,
        NegativeSquareRoot,
    }

    pub type MathResult = Result<f64, MathError>;

    fn div(x:f64, y:f64) -> MathResult {
        if y < 0.00000001 {
            Err(MathError::DivisionByZero)
        } else {
            Ok(x/y)
        }
    }

    fn sqrt(x: f64) -> MathResult {
        if x < 0.0 {
            Err(MathError::NegativeSquareRoot)
        } else {
            Ok(x.sqrt())
        }
    }

    pub fn op(x: f64, y: f64) -> MathResult {
        // 如果 `div` “失败” 了,那么返回 `DivisionByZero`
        let ratio = div(x, y)?;
        println!("ratio is {}", ratio);

        sqrt(ratio)
    }
}

fn main() {
    let ret = checked::op(10.0, 2.0);
    //let ret = checked::op(1.0, 0.0);
    //let ret = checked::op(-10.0, 2.0);
    
    match ret {
        checked::MathResult::Ok(v) => println!("{}", v),
        checked::MathResult::Err(e) => println!("error:{:?}", e),
    }
}
举报

相关推荐

0 条评论