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

标签 string pattern-matching rust

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

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),
                                             ^

最佳答案

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 的引用,而不是将其移出结构。

关于string - 将结构与字符串匹配的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28181112/

相关文章:

c++ - 使用特殊参数拆分字符串

java - 根据字符串到长整型映射将定界字符串转换为定界长整型

c++ - 将字符串拆分为 vector C++

可选第一个特殊字符的正则表达式

rust - 为什么我不必为类型实现 Any 特性,即使它是必需的?

C中比较字符串

在 switch 表达式中尝试记录模式时出现 Java 19 编译器问题

regex - 如何获取括号中指定的内容?

vector - 是否可以在 protobuf 消息中包含向量字段以生成 Rust 结构?

rust - 为什么将移动值的成员分配给时编译不会失败?