Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[Rust] 함수 반환형에 trait 사용하기 - conservative_impl_trait 본문
아시겠지만 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를 사용하는 것도 그렇게 불편하진 않으니까요.
'개발 및 공부 > 언어' 카테고리의 다른 글
[Rust] 원시 문자열(Raw string) 문법 (0) | 2018.04.03 |
---|---|
[C++] execution policy - seq, par, par_unseq (0) | 2018.03.04 |
[Rust] std::str::matches(...) 사용법 (0) | 2018.02.04 |
[Rust] str matches - 문자열 검색 (0) | 2018.01.31 |
[Rust] Deref를 구현할때는 고유 메소드를 피하라. (0) | 2018.01.21 |
Comments