NeuroWhAI의 잡블로그

[Rust] 함수 반환형에 trait 사용하기 - conservative_impl_trait 본문

개발 및 공부/언어

[Rust] 함수 반환형에 trait 사용하기 - conservative_impl_trait

NeuroWhAI 2018. 2. 5. 15:49


아시겠지만 Rust에서 trait을 반환형으로 지정하려면 아래처럼 Box같은 Sized struct를 사용해야 합니다.

1
2
3
4
5
6
7
8
fn even_iter() -> Box<Iterator<Item=u32>> {
    Box::new((0..).map(|n| n * 2))
}
 
fn main() {
    let first_four_even_numbers = even_iter().take(4).collect::<Vec<_>>();
    println!("{:?}", first_four_even_numbers);
}
cs

하지만 아직 stable 버전엔 없는 conservative_impl_trait라는 기능을 사용하면 약간의 수정으로 trait을 반환형으로 지정할 수 있습니다.
공식 문서에 따르면 약간의 성능상 이익도 있다는 것 같습니다.

1
2
3
4
5
6
7
8
9
10
#![feature(conservative_impl_trait)]
 
fn even_iter() -> impl Iterator<Item=u32> {
    (0..).map(|n| n * 2)
}
 
fn main() {
    let first_four_even_numbers = even_iter().take(4).collect::<Vec<_>>();
    println!("{:?}", first_four_even_numbers);
}
cs

보시면 #![feature(conservative_impl_trait)] 매크로로 해당 기능을 사용할거라고 선언했고
반환형 trait에 impl만 앞에 붙혀줬습니다.
무려 이게 끝입니다.

하지만 unstable한 기능이므로 이런게 있구나하고 넘어가시면 될것같습니다.
Box를 사용하는 것도 그렇게 불편하진 않으니까요.




Comments