関数パラメーターにおける参照外し

関数パラメーターにおいても参照外しを行うことができる

例1 クロージャー map関数

let result = [1,2,3,4,5].iter().map(|&&x| x % 2 == 0).collect();
  • &&x : 参照参照外しをおこなっている

例2 関数の定義

参照外ししない場合

fn print_type_name<T>(_val: T) {
    println!("{}", std::any::type_name::<T>());
}

let vec = (0..5).collect::<Vec<i32>>();
for i in &vec {
    print_type_name(i);  // &i32
}

参照外しをした場合

fn print_type_name<T>(_val: &T) {
    println!("{}", std::any::type_name::<T>());
}

let vec = (0..5).collect::<Vec<i32>>();
for i in &vec {
    print_type_name(i);  // i32 
}

関連

yossan.hatenablog.com

doc.rust-lang.org