将结构与String匹配的模式

时间:2015-01-27 22:18:40

标签: string pattern-matching rust

是否可以对String字段进行模式匹配?我不能让这段代码工作。

struct Foo {
    x: int,
    y: int,
    str: String
}

pub fn main() {
    let a = Foo { x: 1, y: 2 , str: "Hi".to_string()};
    match a {
        Foo { x: x, y: y, str: "Hi".to_string() } => println!("Found {}, {}", x, y),
        _ => {}
    }
}

给出了这个错误:

<anon>:10:36: 10:37 error: expected one of `,` or `...`, found `.`
<anon>:10         Foo { x: x, y: y, str: "Hi".to_string() } => println!("Found {}, {}", x, y),
                                             ^

1 个答案:

答案 0 :(得分:5)

match个案可能不包含"Hi".to_string()这样的表达式,只包含常量(例如3"Hi&#34;)或变量(例如x) 。要匹配String字段,您需要使用模式保护:

match a {
    Foo { x: x, y: y, str: ref str } if str == &"Hi" =>
        println!("Found {}, {}", x, y),
    _ => {}
}

if str == &"Hi"是用于检查String值的模式保护。请注意,模式保护强制我们使用ref来捕获对String的引用,而不是将其移出结构。