問題一覧に戻る
中級ジェネリクス
問題85: 型エイリアス
型エイリアスは'type'キーワードを使って既存の型に新しい名前を作成します。複雑な型シグネチャを簡略化し、コードの可読性を向上させます。特に長いジェネリック型、関数ポインタ、固定エラー型のResultに便利です。newtypeパターンと違い、エイリアスは新しい型を作らず別名だけです。ジェネリックエイリアスも可能です。
use std::collections::HashMap;
// 単純なエイリアス
Kilometers = i32;
// ジェネリックエイリアス
Result<T> = std::result::Result<T, std::io::Error>;
// 複雑なエイリアス
Thunk = Box<dyn Fn() + Send + 'static>;
fn main() {
// 単純なエイリアスの使用
let distance: = 42;
println!("Distance: {} km", distance);
// ジェネリックエイリアスの使用
fn read_file() -> <String> {
Ok("File content".to_string())
}
match read_file() {
Ok(content) => println!("Content: {}", content),
Err(e) => println!("Error: {}", e),
}
// 関数ポインタ
let f: = Box::new(|| println!("Hello from thunk!"));
f();
// 複雑な型
type Cache = HashMap<String, Vec<(i32, String)>>;
let mut cache: = HashMap::new();
cache.insert("key".to_string(), vec![(1, "value".to_string())]);
}