Is there a more concise way to format .expect() message?

后端 未结 3 1593
情书的邮戳
情书的邮戳 2020-12-20 14:10

I currently have to use this to format a .expect() message:

fn main() {
    let x: Option<&str&g         


        
相关标签:
3条回答
  • 2020-12-20 14:28

    To avoid the unnecessary overhead of formatting and allocating a String in the case of an Ok, you can convert the Option to a Result and then unwrap it:

    fn main() {
        let x: Option<&str> = None;
        x.ok_or_else(|| format!("the world is ending: {}", "foo"))
            .unwrap();
    }
    
    0 讨论(0)
  • 2020-12-20 14:42

    I would do:

    option.unwrap_or_else(|| panic!("ah: {}", "nuts"))
    

    Formatting a string is somewhat costly. This will avoid formatting the string unless it is really needed.

    0 讨论(0)
  • 2020-12-20 14:49

    First you don't need to write [..]


    If you really want to panic but also want to format the error message, I think I would use assert!():

    fn main() {
        let x: Option<&str> = None;
        assert!(x.is_some(), "the world is ending: {}", "foo");
        let _x = x.unwrap();
    }
    

    If you want you could also use the unwrap crate:

    use unwrap::unwrap;
    
    fn main() {
        let x: Option<&str> = None;
        let _x = unwrap!(x, "the world is ending: {}", "foo");
    }
    

    Also, both these methods avoid the construction of the error String every time, unlike calling expect() with format!().

    0 讨论(0)
提交回复
热议问题