检查 Option<String> 是否为 Some(my_string)

TPR*_*eal 3 rust

我想知道检查q: Option<String>我拥有的 a 是否具有特定字符串的值的最惯用的方法是什么my_string: String。所以最直接的解决办法是:

if q.is_some() && q.unwrap() == my_string
Run Code Online (Sandbox Code Playgroud)

我能想到的另一种:

if q.unwrap_or_default() == my_string
Run Code Online (Sandbox Code Playgroud)

但这在my_string空的极端情况下不起作用。

另一个:

match q {
  Some(s) if s == my_string => {
    ...
  },
  _ => {},
}
Run Code Online (Sandbox Code Playgroud)

但这是非常冗长的。

有没有更简单的东西,比如一些聪明的东西if let

ens*_*nsc 7

直接检查:

if Some(my_string) == q {
}
Run Code Online (Sandbox Code Playgroud)

或(保持my_string活力)

if Some(&my_string) == q.as_ref() {
}
Run Code Online (Sandbox Code Playgroud)

contains()将来的 rust 版本中(可能)会有一个函数,可以像这样使用

if q.contains(&my_string) {
}
Run Code Online (Sandbox Code Playgroud)

它更灵活,因为它允许比较不同的数据类型(当它们实现时PartialEq)。见https://github.com/rust-lang/rust/issues/62358