约束
当使用泛型时,类型参数通常必须使用 trait 作为约束来规定类型实现了什么功能。例如,下面的例子使用 Display
trait 进行打印,因此它要求 T
受 Display
约束;也就是说,T
必须实现 Display
。
// Define a function `printer` that takes a generic type `T` which
// must implement trait `Display`.
fn printer<T: Display>(t: T) {
println!("{}", t);
}
约束将泛型限制为符合约束的类型。也就是
struct S<T: Display>(T);
// Error! `Vec<T>` does not implement `Display`. This
// specialization will fail.
let s = S(vec![1]);
约束的另一个效果是,允许泛型实例访问约束中指定的 traits 的 方法。例如
另外,where
子句也可以在某些情况下用来应用约束,以使其更具表达力。