将结构与字符串匹配的模式

问题描述 投票:1回答:1

是否可以对字符串字段进行模式匹配?我无法使此代码正常工作。

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),
                                             ^
string pattern-matching rust
1个回答
5
投票
match格可能不包含像"Hi".to_string()这样的表达式,只能包含常量(例如3"Hi“)或变量(例如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的引用,而不是将其移出结构。
© www.soinside.com 2019 - 2024. All rights reserved.