0
我正在使用match
語句與.chars().next()
,並且想要將字符附加到字符串(如果它匹配某個字符)。我想這樣做,這樣如何將選項<char>附加到字符串?
keyword.push(line.chars().next())
卻得到一個錯誤:
expected type 'char' found type Option<<char>>
我怎麼會去這個追加到我的字符串?
我正在使用match
語句與.chars().next()
,並且想要將字符附加到字符串(如果它匹配某個字符)。我想這樣做,這樣如何將選項<char>附加到字符串?
keyword.push(line.chars().next())
卻得到一個錯誤:
expected type 'char' found type Option<<char>>
我怎麼會去這個追加到我的字符串?
那麼,多數民衆贊成在:因爲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);
}
}
我想說,如果有一個「匹配」與一個有趣的手臂,「如果讓」更好。 – Shepmaster
好點@Shepmaster - 我試過不會引入太多的概念給出問題。儘管如此,我會將其添加爲另一個選項。 –