2015-12-18 12 views
9

私はすでに数回、Vec<_>を見ました。たとえば、次のようにVec <_>とは何ですか?

let a = "line1\r\nline2\nline3"; 
println!("{:?}", a.lines().collect::<Vec<_>>()); 

しかし、「不確かな顔」<_>ことは何を意味するのでしょうか?

大括弧で囲まれた型名に使用されていますが、どのような型にすることができますか? 私が知っているアンダースコアの唯一の意味は、未使用の変数の名前としてのPythonからです。

答えて

10

「Rustコンパイラは、どのタイプがVecに入るかを推測する」という意味です。 Python(およびRust自身)の未使用変数は、変数名のプレースホルダを表すような、型のプレースホルダを表しています。

あなたはiterator consumersについて錆プログラミング言語章の説明を見つけることができます。

let one_to_one_hundred = (1..101).collect::<Vec<_>>();これは は「Vec<T>に収集言う:_あなたが部分的にヒントを提供できるようになる使用

を、お願いしますが、Tが私のために何であるかを推測してください。 _は であり、この理由で「タイププレースホルダ」と呼ばれることもあります。

+2

ありがとうございます!何らかの理由で、ドキュメントのジェネリックスの章では、パラメータ型の推論について何も言及していません。 – Amomum

+0

'_'構文について具体的な文書がありますか?私は何も見つけることができません。イテレータが説明されているときに使用されるテキストのみを見つける。 – Lii

+0

@Lii私はそれが今言及されている唯一の場所だと思います。この機能を文書化するためのgithubに関する問題は、その段落をイテレータセクションに追加することで終了しました:https://github.com/rust-lang/rust/pull/22293 –

関連する問題