どうコンパイルされるか
Rust
のジェネリクスは monomorphization
によってコ
ンパイルされる
インスタンス化されるたびに専用の関数をつくる
fn snd(x: (T, U)) -> U { x.1 }
let a: (i64, i64) = (0, 1);
snd(a); // => 1
let b: (Vec, Option) = (vec![], None);
snd(b); // => None
この例では と
がインスタンス化されている
let a: (i64, i64) = (0, 1);
snd_i64_i64(a); // <= 専用 関数 呼
let b: (Vec, Option) = (vec![], None);
snd_vec_i32_option_u64(b); // <= 専用 関数 呼
こんな感じにコンパイルされる