May 30 2013
This blog post works with Rust v 0.6, and may change in the future :).
A common need in various algorithms is to iterate with some sort of step. A simple way to do this in Rust is with unit::range_step
:
let nums = [1,2,3,4,5,6,7];
for uint::range_step(0, bytes.len() - 1, 2) |i| {
println(fmt!("%d & %d", nums[i], nums[i+1]));
}
This yields
1 & 2
3 & 4
5 & 6
Of course, this is awkward: I wish I had some code to do something like:
let nums = [1,2,3,4,5,6,7];
for nums.in_groups |i, j| {
println(fmt!("%d & %d", i, j));
}
But I think this is just out of my abilities. The issue is that the closure needs to take the same number of arguments as the step, and I’m not sure that I have the Rust-fu to make it work yet.
After a discussion in the IRC room, Rust doesn’t have the Rust-fu yet either; varargs aren’t there, so this style is a no-go for now.
Oh, and since there were no examples of this yet, I added some to the docs.