你从不使用
第一
的分配
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
}