代码之家  ›  专栏  ›  技术社区  ›  Erik Thysell

为什么在if语句之前未使用_assignment?

  •  0
  • Erik Thysell  · 技术社区  · 3 年前

    我有以下方法,并且收到的未使用分配警告 let mut res = 1.0 :

    fn my_func(pld: &f64, lambda: &[f64;NUMF]) -> [f64;NUMF] {
        let mut result = [0.0; NUMF];
        for i in 0..NUMF{
            let pdrel = pld / lambda[i];
            let mut res = 1.0;
            if pdrel >= 0.0 {
                res = 1.0;
            } else {
                res = 1.0 - (7.5 * pdrel.abs()).sqrt();
                if res >= 0.0 {
                } else {
                    res = 0.0;
                }
            }
            result[i] = res;
        }
        result
    }
    

    我知道我可以 #[allow(unused_assignment)] 以避免显示。但是,我怎样才能写更多“正确”的代码来避免警告呢?

    1 回复  |  直到 3 年前
        1
  •  4
  •   Jonas Fassbender    3 年前

    你从不使用 第一 的分配 res 。这就是鲁斯特抱怨的原因。您在下面if-else语句的所有分支中分配它,因此永远不会读取默认值 1.0 你分配它。你可以删除分配,rustc将停止向你发出警告:

    fn my_func(pld: &f64, lambda: &[f64;NUMF]) -> [f64;NUMF] {
        let mut result = [0.0; NUMF];
        for i in 0..NUMF{
            let pdrel = pld / lambda[i];
            let mut res;
            if pdrel >= 0.0 {
                res = 1.0;
            } else {
                res = 1.0 - (7.5 * pdrel.abs()).sqrt();
                if res >= 0.0 {
                } else {
                    res = 0.0;
                }
            }
            result[i] = res;
        }
        result
    }
    

    或者,您可以依赖于每个块在Rust中都有一个返回值的事实,因此您可以直接从if-else块返回值。那你就不必 res 可变的,您可能更喜欢:

    fn my_func(pld: &f64, lambda: &[f64;NUMF]) -> [f64;NUMF] {
        let mut result = [0.0; NUMF];
        for i in 0..NUMF{
            let pdrel = pld / lambda[i];
            
            let res = if pdrel >= 0.0 {
                1.0
            } else {
                let tmp = 1.0 - (7.5 * pdrel.abs()).sqrt();
                if tmp >= 0.0 {
                    tmp
                } else {
                    0.0
                }
            };
            
            result[i] = res;
        }
        result
    }
    
    推荐文章