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

时间:2016-11-03 22:51:33

标签: string char rust optional

我正在使用带有match的{​​{1}}语句,并且如果字符与某个字符匹配,则希望将字符附加到字符串。我想这样做

.chars().next()

但是收到错误:

keyword.push(line.chars().next()) 

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

1 个答案:

答案 0 :(得分:11)

嗯,就是这样:因为next()返回Option<char>,它可能会返回None。您需要考虑该情况......否则您可能会引起恐慌,您的申请将退出。

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

keyword.push(line.chars().next().unwrap());

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

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

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

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

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

for c in line.chars() {
    if c == 'H' || c == 'W' {
        keyword.push(c);
    }
}

Playground example