問題一覧に戻る
上級ライフタイム
問題99: 高階トレイト境界

高階トレイト境界(HRTB)はすべての可能なライフタイムに対する制約を表現できます。for'<''a'>'構文はライフタイムに対する全称量化を作ります。これは特定の一つではなく、任意のライフタイムで動作する関数に不可欠です。クロージャ境界やイテレータアダプタで一般的。HRTBは任意のライフタイムの借用データで動作する柔軟なAPIを可能にします。

// 高階トレイト境界
fn apply<F>(f: F)
where
F: <> Fn(& str) -> & str
{
let s1 = "hello";
let r1 = f(s1);

let s2 = String::from("world");
let r2 = f(&s2);

println!("{} {}", r1, r2);
}

// クロージャの使用
fn main() {
apply(|s| s);

// 明示的なライフタイム
apply(|s: &str| -> { s });
}