Page History: The LUA 5.1 Programming Language
Compare Page Revisions
Page Revision: 2007/09/07 14:32
Intro
WoW add-ons are developed using the LUA 5.1 programming language:
LUA 5.1 ManualOf course, the LUA language itself does not implement the WoW API, which uses an event-driven model, so simply reading the manual will not help you to write that killer add-on. But, you've got to crawl before you can run, so let's dive into some of the syntax features of LUA itself.
Reserved Keywords
A lot can be learned about a language just by knowing what words are reserved keywords (and thus, cannot be used as variable names).
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
Arithmetic Operators
+ addition 1 + 2 => 3
- substraction 2 - 1 => 1
* multiplication 3 * 4 => 12
/ division 9 / 3 => 3
% modulo 8 % 6 => 2
^ exponent 2 ^ 5 => 32
Relational Operators
== equality
~= inequality
< less-than
<= less-than or equal
> greater-than
>= greater-than or equal
Logical Operators
false and
nil are both considered
false, everything else is
true.
and (returns first argument if false/nil, otherwise returns second argument)
or (returns the first argument if not false/nil, otherwise returns the second argument)
not (returns true or false, depending on the argument)
10 or 20 --> 10
10 and 20 --> 20
nil or 10 --> 10
nil and 10 --> nil
Variable Assignment
a = 1
a, b = 1, 2 Multiple assignment at the same time
a, b = b, a Variable Swap
_, _, a = 1, 2, 3 Common usage of "throw away" variables
Concatenation
The double-dot (..) represents the concatenation operator.
name = "Jason"
print("Hello, "..name..", it is very good to meet you!")
results:
Hello, Jason, it is very good to meet you!
Length Operator
The pound-sign (#) preceeding a variable returns the length of that variable. If the variable is a string, then the returned value is the number of characters. If the variable is a table, then the returned value is the highest index number such that the table element at the next higher index is nil.
name = "Jason"
print(#name)
results:
5
IF Statements
if i == 1 then
print("One")
elseif i==2 then
print("Two")
else
print(i)
end
FOR Statements
for i = 1, 5, 1 -- start, limit, increment
do
print(i.."\n")
end
results:
1
2
3
4
5
WHILE and REPEAT Statements
i = 3
while i > 1
do
print(i.."\n")
i = i - 1
end
repeat
print(i.."\n")
i = i + 1
until i = 3
results:
3
2 <-- last output of the WHILE
1 <-- first output of the REPEAT
2
(work in progress)