generic struct

假设我们有这样一个结构体

  1. #[derive(Debug)]
  2. struct Square {
  3. x: u32,
  4. y: u32,
  5. }

我们要开发一个print函数将这个结构体打印出来

  1. fn print(s: &Square) {
  2. println!("{:?}", s);
  3. }

这时候有新的需求,假如一个新的类型Point

  1. #[derive(Debug)]
  2. struct Point {
  3. x: u32,
  4. y: u32,
  5. z: u32,
  6. }

同样也要打印这个结构体,这时候就可以用泛型

  1. fn print<S>(s: &S)
  2. where S: Debug
  3. {
  4. println!("{:?}", s);
  5. }

这个print函数能接收所以实现了Debug这个trait的结构体

Iterator

Iterator这个trait有一个associatedType,在where clause中,同样能对这个type做限制

  1. fn debug_iter<I>(iter: I)
  2. where I: Iterator,
  3. I::Item: Debug {
  4. for item in iter {
  5. println!("{:?}", item);
  6. }
  7. }

debug_iter除了限制了入参iter之外,还限制了Item associatedtype必须实现Debug