Skip Navigation

How can I avoid "value assigned to last is never read" warning from this macro?

Removing last will break my library.

 Rust
    
#[macro_export]
macro_rules! list {
    () => {
    None
    };
    [ $x:expr, $( $y:expr ),* ] => {
    {
        let mut first = cons($x, &None);
        let mut last = &mut first;
        $(
        let yet_another = cons($y, &None);
        if let Some(ref mut last_inner) = last {
            let last_mut = Rc::get_mut(last_inner).unwrap();
            last_mut.cdr = yet_another;
            last = &mut last_mut.cdr;
        }
        )*
        first
    }
    }
}


  

This macro works as I expected because it can pass these tests.

 Rust
    
    #[test]
    fn dolist() {
        let mut v = vec![];
        dolist!((i &cons(10, &list![20, 30, 40])) {
            v.push(i.car);
        });
        assert_eq!(v, vec![10, 20, 30, 40]);
    }

    #[test]
    fn turn_list_to_vec() {
        assert_eq!(list_to_vec(&list![1, 2, 3]), vec![1, 2, 3]);
    }

    #[test]
    fn count_elements() {
        assert_eq!(list_len(&list![10, 20, 30]), 3);
    }


  

However I got the warning "value assigned to last is never read."

How can I avoid this warning?

P.S. Full code

You're viewing a single thread.

10 comments
10 comments