Archive/Rust

[Rustlings] 12. Generic

Rust에서 함수나 구조체, enum에 제너릭 타입을 사용할 수 있다.

struct Point<T> {
  x: T,
  y: T,
}

impl<T> Point<T> {
  fn add(&self, other: Point<T>) -> Point<T> {
    Point {
      x: &self.x + other.x,
      y: &self.y + other.y,
    }
  }
}

fn toVec<T>(x: T) -> Vec<T> {
  vec![x]
}

만약 특정 타입에 대해 다른 정의를 넣고 싶다면 <>안에 특정 타입을 집어 넣으면 된다. 메소드의 경우에는 impl<T>대신 impl에 넣고 특정 구조체 뒤에 특정 타입을 명시한다.

fn max(v: &Vec<i32>) -> i32 {
  let mut res = v[0];
  
  for x in v {
    if (res < x) {
      res = x;
    }
  }
  
  res
}

impl GradeCard<i32> {
  // ...
}

제너릭 타입은 모든 타입을 포함한다. 만약 어떤 trait이 포함된 타입에만 적용하려 한다면 특정 trait을 명시하면 된다.

impl<T: Display> GradeCard<T> {
  fn print(&self) {
    println!("{} - {}", &self.name, &self.grade);
  }
}

'Archive > Rust' 카테고리의 다른 글

[Rustlings] 14. Result  (0) 2021.05.30
[Rustlings] 13. Option  (0) 2021.05.30
[Rustlings] 11. Error Handling  (0) 2021.05.28
[Rustlings] 10. String  (0) 2021.05.26
[Rustlings] 9. collection  (0) 2021.05.25