collect()とか::<T>構文とか

collect()イテレータを指定のコレクション型にキャストするメソッド
利用場面はこんな感じだと思う

//処理をして再びコレクションとして扱う
let v = vec![1u8, 2, 3, 4, 5, 6, 7, 8, 9];
let closure = ここで処理内容は重要ではない ;
let result: Vec<u8> = v.iter().map(&closure).collect();

//Rangeから数値のベクタをつくる
let result :Vec<u8> = (0..10).collect();

collect()を使うときはなんらかの形で型を明示しなければいけない。*1

先のコードでは変数に型アノテーションを付与したが、別の方法もある。
Rustでは::<T>という構文で戻り値の型を指定することができる。turbofishっていう構文らしい
例えば先のコードはこんな風に書ける

let result  = v.iter().map(&closure).collect::<Vec<u8>>();

collect()にかぎらず他のメソッドでも同様に使えるようだ

let v = Vec::<i32>::new();

let x = "42".parse::<i32>();
assert_eq!(42, x.unwrap())

なんだか引数のように型を指定できて、僕はこちらも好きです

勉強したサイト

Rust の turbofish と GHC 8 の Type Application ― または我々は如何にして多相な関数を単相化するか - ryota-ka's blog

ジェネリクスとturbofishの公式doc、旧版だけどわかりやすかった
Generics - The Rust Programming Language

現行の第2版
B - Operators and Symbols - The Rust Programming Language

*1:公式ガイドがわかりやすい イテレータ