Rust で型の名前を取得する (std::any::type_name)

std::any::type_name 関数を使うと、型パラメーターで指定した型の名前を、文字列表現で取得することができます。 次の例では、String 型の型名を取得しています。

let name = std::any::type_name::<String>();
println!("{}", name) //=> alloc::string::String

返される文字列の形式は明確には仕様化されておらず、Rust のバージョンごとに変わったりするので、この文字列に依存したビジネスロジックは記述すべきではない とされています(診断用にのみ使用できます)。

次のようなユーティリティ関数を作成すれば、任意のリテラル値や変数の型を簡単に調べることができます。

fn print_type_of<T>(_: T) {
    println!("{}", std::any::type_name::<T>())
}

fn main() {
    print_type_of(0);        //=> i32
    print_type_of(0b1111);   //=> i32
    print_type_of(0i8);      //=> i8
    print_type_of(0u64);     //=> u64
    print_type_of(0.1);      //=> f64
    print_type_of(0.1e5);    //=> f64
    print_type_of(0.1f32);   //=> f32
    print_type_of(0.1e5f32); //=> f32
    print_type_of('a');      //=> char
    print_type_of("Hello");  //=> &str
}