Main Content

For loops in Lua

Archive - Originally posted on "The Horse's Mouth" - 2009-10-14 20:17:37 - Graham Ellis

As an old Fortran programmer, I remember that a for loop was given a start point, an end point and a step ... and they had to be whole numbers (integers). Lua's for loops can be used that way, but they can be used a lot more flexibly too.

From, to, step for loops

Th egood news is that Lua works in double precision floats throughout, so your from, to and step can be anything you like ... and the step can go forwards or backwards. There's an example here where I report Celsius to Fahrenheit conversions - any step you like. You'll also notice that I have specified whole numbers for the conversion factors and they work ... 9 / 5 gives a result of 1.8 in Lua, not an integer result of 1.

If you're a C, Perl, PHP or Java programmer, you'll be used to for loops where the condition (end point) is checked every time around ... so that if the end condition is chanced within the loop, it effects the number of times that the loop runs. That's not the case with Lua which, like Fortran, decides the number of times the loop will run even before the first iteration is started. See here for an example.

in for loops

If you use an in style for loop, you're looping through an iteration (a set) of values or value pairs. Commonly used functions to generate these iterations are pairs which goes thought EVERY pair of values in a table, ipairs which only goes through the INDEXED pairs (i.e. it starts at element one, then gives elements 2, 3, etc until it finds a missing index at which point in stops, ignoring names elements and elements which are numbered but not in sequence from the start) and string.gmatch which goes though all strings that match a pattern within an incoming longer string.

See here for examples of pairs and ipairs, and here for an example of string.gfind