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)