File tree Expand file tree Collapse file tree 1 file changed +9
-4
lines changed Expand file tree Collapse file tree 1 file changed +9
-4
lines changed Original file line number Diff line number Diff line change @@ -108,14 +108,19 @@ less to the client. The client does not know _how_ the result iterator is
108
108
constructed or represented, which means the representation can change in the
109
109
future without breaking client code.
110
110
111
- In the future the same thing can be accomplished more concisely with the [ `impl
112
- Trait`] feature but this is currently unstable.
111
+ Rust 1.26 also introduces the [ ` impl Trait ` ] [ ] feature, which is more concise
112
+ than the newtype pattern but with some additional trade offs, namely with `impl
113
+ Trait` you are limited in what you can express. For example, returning an
114
+ iterator that impls ` Debug ` or ` Clone ` or some combination of the other iterator
115
+ extension traits can be problematic. In summary ` impl Trait ` as a return type
116
+ is probably great for internal APIs and may even be appropriate for public APIs,
117
+ but probably not in all cases. See the [ "` impl Trait ` for returning complex
118
+ types with ease"] [ impl-trait-2 ] section of the Edition Guide for more details.
113
119
114
120
[ `impl Trait` ] : https://github.com/rust-lang/rfcs/blob/master/text/1522-conservative-impl-trait.md
121
+ [ impl-trait-2 ] : https://rust-lang-nursery.github.io/edition-guide/rust-2018/trait-system/impl-trait-for-returning-complex-types-with-ease.html
115
122
116
123
``` rust
117
- #![feature(conservative_impl_trait)]
118
-
119
124
pub fn my_transform <I : Iterator >(input : I ) -> impl Iterator <Item = (usize , I :: Item )> {
120
125
input . skip (3 ). enumerate ()
121
126
}
You can’t perform that action at this time.
0 commit comments