简体   繁体   中英

How to match against nested String in Rust

How do I match against a nested String in Rust? Suppose I have an enum like

pub enum TypeExpr {
    Ident((String, Span)),
    // other variants...
}

and a value lhs of type &Box<TypeExpr> . How do I check whether it is an Ident with the value "float"?

I tried

if let TypeExpr::Ident(("float", lhs_span)) = **lhs {}

but this doesn't work since TypeExpr contains a String , not a &str . I tried every variation of the pattern I could think of, but nothing seems to work.

If you really want to do this with an if let , you might have to do it like this

if let TypeExpr::Ident((lhs_name, lhs_span)) = lhs {
    if lhs_name == "float" {
        // Do the things
    }
}

Of course, it can also be done with a match :

match lhs {
    TypeExpr::Ident((lhs_name, lhs_span)) if lhs_name == "float" => {
        // Do the things
    }
    _ => {}
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM