Lua crash course
Following crash course is an extremely condensed extract from the official Lua reference manual. For more details refer to the free Lua Quick Reference e-book, to the Lua website and to the numerous examples contained in the demo scenes.
Lexical conventions
Lua is a case sensitive language. "and", "And" or "AND" are not the same.
Following are Lua keywords:
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while
Following strings denote other tokens:
+ - * / % ^
# == ~= <= >=
< > = ( ) {
} [ ] ; : ,
. .. ...
Literal strings can be delimited by matching single or double quotes (e.g. 'hello' or "hello" )
A comment starts with a double hyphen (--) anywhere outside of a string. e.g.:
a=4 -- variable a is now 4!
Types and values
Lua is a dynamically typed language which means that variables do not have types; only values do.
There are 8 basic types in Lua:
nil type of the value nil whose main property is to be different from any other value.
It usually represents the absence of a useful value
bool values false and true (both nil and false make a condition false;
any other value makes it true)
number both integer and floating-point numbers (has internally two distinct
representations: long integer and double)
string arrays of characters (strings may contain any 8-bit character,
including embedded zeros)
function Lua functions
userdata can hold arbitrary C data (corresponds to a block of raw memory)
thread independent threads of execution used to implement coroutines
table arrays that can hold values of any type except nil
Variables
There are 3 kinds of variables: global variables, local variables and table fields. Any variable is assumed to be global unless explicitly declared as local
Before the first assignment to a variable, its value is nil
Square brackets are used to index a table (e.g. value=table[x] ). The first value in a table is at position 1 (and not 0 as for C arrays)
Statements
Relational operators (always result in false or true)
== equality
~= negation of equality
< smaller than
> bigger than
<= smaller or equal than
>= bigger or equal than
Lua allows multiple assignments. The syntax for assignments defines a list of variables on the left side and a list of expressions on the right side. The elements in both lists are separated by commas:
x,y,z = myTable[1],myTable[2],myTable[3]
If control structure (by example):
if value1==value2 then
print('value1 and value2 are same!')
end
For control structure (by example):
for i=1,4,1 do -- count from 1 to 4 with increments of 1
print(i)
end
While control structure (by example):
i=0
while i~=4 do
i=i+1
end
Repeat control structure (by example):
i=0
repeat
i=i+1
until i==4
Table operations (by example):
myTable={'firstValue',2,3} -- builds a table with 3 values
print(myTable[1]) -- prints the first element in the table
table.insert(myTable,4) -- appends the number 4 to the table
Concatenation (by example):
a='hello'
b=' world'
c=a..b -- c contains 'hello world'
Length operator #:
stringLength=#'hello world'
tableSize=#{1,2,3,4,5}
Bitwise operators
Lua supports the following bitwise operators:
& bitwise AND
| bitwise OR
~ bitwise exclusive OR
>> right shift
<< unary bitwise NOT
~ unary bitwise NOT
Coroutines or threads
Coroutines are easily created and resumed with:
-- Create a coroutine:
corout=coroutine.create(coroutineMain)
-- Start/resume a coroutine:
if coroutine.status(corout)~='dead' then
local ok,errorMsg=coroutine.resume(corout)
if errorMsg then
error(debug.traceback(corout,errorMsg),2)
end
end
-- The coroutine itself:
function coroutineMain()
while not sim.getSimulationStopping() do
-- some code
end
end
|