如何将Option <char>附加到字符串?

whi*_*olf 0 string char optional rust

我正在使用一个match语句,.chars().next()并且如果它匹配某个字符,则想要将字符附加到字符串.我想这样做

keyword.push(line.chars().next()) 
Run Code Online (Sandbox Code Playgroud)

但得到一个错误:

expected type 'char' found type Option<<char>>
Run Code Online (Sandbox Code Playgroud)

我该如何将其附加到我的字符串上?

Sim*_*ead 11

好吧,那就是事情:因为它next()返回了Option<char>,它可能会返回None.您需要考虑该情况......否则您可能会引起恐慌并且您的应用程序将退出.

因此,盲目和容易出错的方式是解开它:

keyword.push(line.chars().next().unwrap());
Run Code Online (Sandbox Code Playgroud)

这可能会在某些时候崩溃.你想要的是解构它并确保那里有一些东西:

match line.chars().next() {
    Some(c) => {
        if c == 'H' || c == 'W' {
             keyword.push(c);
        }
    },
    None => ()
}
Run Code Online (Sandbox Code Playgroud)

正如Shepmaster在评论中指出的那样,上面的特定场景(我们只关心其中的一个部分match)可以压缩为if let绑定:

if let Some(c) = line.chars().next() {
    if c == 'H' || c == 'W' {
       keyword.push(c);
    }
}
Run Code Online (Sandbox Code Playgroud)

那就是说 - 通过循环迭代你可以免费得到这一切for:

for c in line.chars() {
    if c == 'H' || c == 'W' {
        keyword.push(c);
    }
}
Run Code Online (Sandbox Code Playgroud)

游乐场的例子

  • 当有一个有趣的手臂"匹配"时,我会说"if let"会更好. (2认同)