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 |