2016-11-03 5 views
0

.chars().next()matchステートメントを使用していて、特定の文字と一致する文字を文字列に追加したいとします。文字列にオプション<char>を追加するにはどうすればよいですか?

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

は、どのように私は自分の文字列にこれを追加するに行くか:私はこの

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

のようにそれを行うが、エラーを取得しようとしていますか?

答えて

11

よく、それはnext()Option<char>を返すので、Noneを返す可能性があります。そのシナリオを考慮する必要があります。そうしないと、パニックが発生し、アプリケーションが終了します。

ので、ブラインドとエラーが発生しやすい方法は、それをアンラップすることです:そうないくつかの時点でクラッシュします

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

。何が欲しいのは、それをdestructureと何かがありますことを確認することです。

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

私は、もし面白い腕1本との「マッチ」があるときは、「もしかしたら」が良いと言いたいと思います。 – Shepmaster

+1

良い点@Shepmaster - 尋ねられた質問を考えれば、あまりにも多くの概念を導入しないようにしました。私は別のオプションとしてそれを追加します。 –

関連する問題