This code (playground):
fn main() {
let fruits = "banana";
let num = 20;
let result: i32;
match fruits {
"banana" => {
if num > 100 {
result = num * 3;
} else if num > 30 {
result = num * 4;
} else {
result = num * 5;
}
}
"apple" => {
if num > 100 {
result = num * 16;
} else if num > 30 {
result = num * 18;
} else {
result = num * 20;
}
}
_ => println!("wrong fruits option"),
}
// if num > 100 { result = num * 3; }
// else if num > 30 { result = num * 4; }
// else { result = num * 5;}
println!("{}", result)
}
Gives the following error:
error[E0381]: borrow of possibly-uninitialized variable: `result`
--> src/main.rs:31:20
|
31 | println!("{}", result)
| ^^^^^^ use of possibly-uninitialized `result`
|
= note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)
As you can see result is initialized in match, so why is compiler giving me an error?
After changing the line
let result : i32;
to (playground)
let mut result = 0;
The code is compiling and working fine.
This is also working (playground):
fn main() {
// let fruits = "banana";
let num = 20;
let result: i32;
// match fruits {
// "banana" => {
// if num > 100 {
// result = num * 3;
// } else if num > 30 {
// result = num * 4;
// } else {
// result = num * 5;
// }
// }
// "apple" => {
// if num > 100 {
// result = num * 16;
// } else if num > 30 {
// result = num * 18;
// } else {
// result = num * 20;
// }
// }
// _ => println!("wrong fruits option"),
// }
if num > 100 {
result = num * 3;
} else if num > 30 {
result = num * 4;
} else {
result = num * 5;
}
println!("{}", result)
}