2016-11-03 27 views
0

我正在使用match語句與.chars().next(),並且想要將字符附加到字符串(如果它匹配某個字符)。我想這樣做,這樣如何將選項<char>附加到字符串?

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

卻得到一個錯誤:

expected type 'char' found type Option<<char>> 

我怎麼會去這個追加到我的字符串?

回答

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

+2

我想說,如果有一個「匹配」與一個有趣的手臂,「如果讓」更好。 – Shepmaster

+1

好點@Shepmaster - 我試過不會引入太多的概念給出問題。儘管如此,我會將其添加爲另一個選項。 –