A short introduction to lua

Lua is a lightweight programming language which is easy to embed and is well-suited to the task of controlling a simulation. For a quick introduction to lua, please read Learn Lua in 15 Minutes. However, for most cases the input file format can be treated as follows:

Assignment is performed by setting a variable name equal to an object, e.g.

pi = 3.141592654

Strings are created by enclosing characters in quotation marks:

msg = 'hello world'

and boolean variables can be set using the true and false keywords:

yes = true
yes = false

A key data structure in lua is the table, which serves both as an array and an associative array or map, and is denoted using braces. First, the following creates a table to hold a 1D vector:

v = { 1, 2, 3 }

whilst using key=value pairs creates a table as an associative array:

v = { x = 3, y = 4, type = 'dual' }

Tables can be nested.

Functions are called using:

x = fname(arg1, arg2, ...)

where fname is the name of the function, which returns a single value (which is stored in x in the above example). Keywords can be passed in by using a table. If the function takes a single table, then the parentheses need not be included, such that the following calls are identical:

x = fname1({ x = 3, y = 4, type = 'dual'})
x = fname1{ x = 3, y = 4, type = 'dual'}

All options are passed into HANDE by using a table as an associative array. Each function exposed by HANDE to the lua script takes a single (nested) table.

Lua handles multiple return values from functions in a convenient manner. If a function call returns values that are then not set to a variable, the additional values are discarded. If a function call returns fewer values than are the variables set to hold the results of the function call, the additional variables are set to nil. See (e.g.) http://www.lua.org/pil/5.1.html for more details.

Warning

lua, and by extension the HANDE input file, is case sensitive.