제네릭타입을 많이 쓰다보면 <>괄호가 많이 달린 반환 타입을 볼수 있다.
use std::iter;
use std::vec::IntoIter;
fn cyclical_zip(v:Vec<u8>, u: Vec<u8>) ->
iter: Cycle<iter::chain<IntoIter<u8>, IntoIter<u8>>> {
v.into_iter().chain(u.into_iter()).cycle()
}
이럴때 반환타입을 impl Trait으로 리펙토링하면 거기에서 구현하고 있는 트레이드만 지정할 수 있게 된다.
use std::fmt::Display;
fn print(val: impl Display) {
println!("{}", val);
}
fn main() {}
하지만 단점도 존재하는데 함수에서 반환되는 Circle, Triangle, Rectangle 타입이 제각각일수 있어서 오류가난다. 명심해야 할것은 특정 타입에 연관된 함수만 impl Trait를 반환 타입으로 쓸수 있다.
trait Shape {
fn new() -> Self;
fn area(&self) -> f64;
}
fn make_shape(shape:&str) -> impl Shape {
match shape {
"circle" => Circle::new(),
"triangle" => Triangle::new(),
"shape" => Rectangle::new(),
}
}
fn main() {}
https://www.yes24.com/Product/Goods/116789691
프로그래밍 러스트 - 예스24
『러스트 프로그래밍 공식 가이드』보다 더 친절하게, 한층 더 고급 기능까지 다룬다!이 책은 메모리 안전성과 신뢰할 만한 동시성에 예측 가능한 성능을 더한 러스트의 기능이 어떤 식으로 메
www.yes24.com
'Rust' 카테고리의 다른 글
자바스크립트 러스트 클로저 비교, 메모리관리 (0) | 2024.01.26 |
---|---|
Rust Closure (0) | 2024.01.24 |
러스트 제네릭 스트럭트 (0) | 2024.01.15 |
러스트 모듈(pub mod) (0) | 2024.01.09 |
러스트 제네릭(generic) 함수 정의 (0) | 2024.01.01 |