0
0
Rustprogramming~20 mins

Result enum in Rust - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Result Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this Rust code using Result?
Consider this Rust code snippet using the Result enum. What will it print?
Rust
fn divide(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 {
        Err(String::from("division by zero"))
    } else {
        Ok(a / b)
    }
}

fn main() {
    match divide(10, 2) {
        Ok(val) => println!("Result is {}", val),
        Err(e) => println!("Error: {}", e),
    }
}
ACompilation error
BError: division by zero
CResult is 0
DResult is 5
Attempts:
2 left
💡 Hint
Check what happens when dividing 10 by 2 and how the match handles Ok and Err.
Predict Output
intermediate
2:00remaining
What error message does this code produce?
Look at this Rust code using Result. What error message will it print?
Rust
fn parse_number(s: &str) -> Result<i32, String> {
    s.parse::<i32>().map_err(|_| String::from("parse error"))
}

fn main() {
    match parse_number("abc") {
        Ok(n) => println!("Number: {}", n),
        Err(e) => println!("Error: {}", e),
    }
}
ANumber: 0
BError: parse error
CCompilation error
DError: invalid digit found in string
Attempts:
2 left
💡 Hint
The string "abc" cannot be parsed as a number, so the error branch runs.
🔧 Debug
advanced
2:00remaining
Why does this Rust code cause a compilation error?
This Rust code tries to unwrap a Result but causes a compilation error. Why?
Rust
fn get_value(flag: bool) -> Result<i32, String> {
    if flag {
        Ok(42)
    } else {
        Err("no value".to_string())
    }
}

fn main() {
    let val = get_value(true).unwrap_or("default");
    println!("Value: {}", val);
}
AThe error string "no value" is not valid syntax
Bunwrap_or cannot be used on Result, only on Option
Cunwrap_or expects the same type as Ok, but "default" is a string, causing a type mismatch
DThe function get_value returns a Result but unwrap_or is missing parentheses
Attempts:
2 left
💡 Hint
Check the type expected by unwrap_or and the type of the argument passed.
Predict Output
advanced
2:00remaining
What is the output of this Rust code using ? operator with Result?
Analyze this Rust code that uses the ? operator with Result. What will it print?
Rust
fn try_divide(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 {
        Err("division by zero".to_string())
    } else {
        Ok(a / b)
    }
}

fn main() {
    let result = try_divide(10, 0).unwrap_or_else(|e| {
        println!("Error handled: {}", e);
        -1
    });
    println!("Result: {}", result);
}
A
Error handled: division by zero
Result: -1
BResult: 0
CError handled: division by zero
DCompilation error
Attempts:
2 left
💡 Hint
The ? operator is not used here, but unwrap_or_else handles the error case.
🧠 Conceptual
expert
2:00remaining
How many times is the closure executed in this Rust code using Result and map_err?
Consider this Rust code snippet. How many times will the closure inside map_err be executed?
Rust
fn main() {
    let res: Result<i32, &str> = Err("fail");
    let new_res = res.map_err(|e| {
        println!("Handling error: {}", e);
        "handled"
    });
    let final_res = new_res.map_err(|e| {
        println!("Second handler: {}", e);
        "final"
    });
}
A2 times
B1 time
C0 times
D3 times
Attempts:
2 left
💡 Hint
Each map_err runs only if the Result is Err. The Result stays Err after the first map_err.