Removing last will break my library.
#[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.
#[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
The issue is related to the binding being reassigned then never used. It’s happening because they’re using code generation where the final loop doesn’t need to assign. (but previous loops use the assignment at the loop start. Just throwing all that in a function and adding the warning suppression fixes it.
edit: I’m wrong, using an underscore works
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=2ccac2a848523cb995b6c0efd92c569c