問題一覧に戻る
中級トレイト
問題66: トレイト境界
トレイト境界はジェネリック型を制約し、特定の機能を持つことを保証します。山括弧内でT: Traitと書くか、where句で複雑な制約を表現します。型安全性を保ちながら、特定のメソッドを使用できるジェネリック関数を書けます。Rustの型システムの中核機能です。
use std::fmt::Display;
// トレイト境界を使った関数
fn print_twice<T: >(item: T) {
println!("{}", item);
println!("{}", item);
}
// where句を使った関数
fn compare_and_display<T, U>(first: T, second: U) -> String
where
T: Display + PartialEq<>,
U: ,
{
if first == second {
format!("{} equals {}", first, second)
} else {
format!("{} and {} are different", first, second)
}
}
fn main() {
print_twice(42);
print_twice("Hello");
let result = compare_and_display(10, 10);
println!("{}", result);
}