iter_vals
This crate allows for on the fly iterator creation.
Examples
You can use it to return an iterator over literals:
use iter_vals;
use *;
let mut digital = digital;
assert_eq!;
assert_eq!;
assert_eq!;
let mut non_digital = non_digital;
assert_eq!;
assert_eq!;
assert_eq!;
You can conditionally include values. This can be useful to return a variable number of values without having to allocate:
use iter_vals;
let mut next_nums = next_numbers;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
let mut next_nums = next_numbers;
assert_eq!;
assert_eq!;
assert_eq!;
You can expand other iterators inside the iterator you return.
This can be especially useful, when dealing with Options:
use iter_vals;
let mut nums = make_iter;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
let mut nums = make_iter;
assert_eq!;
assert_eq!;
assert_eq!;
let mut nums = iter_vals!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
Note
If you want to return computed values, you currently have to put them in parenthesis for that to work, because of a limitation in the macro system.
This will not work:
use iter_vals::iter_vals;
let nums: Vec<_> = iter_vals!(1 + 1, 2 + 2, 3 + 3).collect();
assert_eq!(nums, vec![2, 4, 6]);
But this will:
use iter_vals;
let nums: = iter_vals!.collect;
assert_eq!;