Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #![feature(unboxed_closures)]
- fn this<F>(mut f: F)
- where
- F: FnMut<()>,
- F::Output: Extend<u8>,
- {
- f().extend([1,2,3].iter().cloned());
- f().extend([1,2,3].iter().cloned());
- }
- fn use_that<T: Extend<u8>>(t: &mut T) {
- this(|| with_offset(t, 1))
- }
- fn with_offset<T: Extend<u8>>(inner: &mut T, offset: u8) -> impl Extend<u8> + '_ {
- ExtendWithOffset { inner, offset }
- }
- struct ExtendWithOffset<'a, T> {
- inner: &'a mut T,
- offset: u8
- }
- impl<'a, T: Extend<u8>> Extend<u8> for ExtendWithOffset<'a, T> {
- fn extend<I: IntoIterator<Item=u8>>(&mut self, iter: I) {
- let o = self.offset;
- self.inner.extend(iter.into_iter().map(|c| {
- c + o
- }));
- }
- }
- fn main() {
- let mut v = vec![];
- use_that(&mut v);
- assert_eq!(vec![2,3,4,2,3,4], v);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement