一、变量命名规范
一般约定,以下划线开头连接一串大写字母的名字(比如 _VERSION)被保留用于 Lua 内部全局变量。
二、字符串
可以用单引号,也可以用双引号,还可以包含转义符 ‘\a’ (响铃), ‘\b’ (退格), ‘\f’ (表单), ‘\n’ (换行), ‘\r’ (回车), ‘\t’ (横向制表), ‘\v’ (纵向制表), ‘\’ (反斜杠), ‘\”’ (双引号), 以及 ‘\” (单引号)
字符串还可以用长括号括起来的方式定义。我们把两个正的方括号间插入n个等号定义为第n级正长括号,就是说,0 级正的长括号写作 [[ , 一级正的长括号写作 [=[ ,反的长扩展也作类似定义。另一个约定是,当正的长括号后面立即跟了一个换行符, 这个换行符就不包含在这个字符串内。
三、注释
注释可以在除字符串内的任何地方是以两横 (–) 开始。 如果跟在两横后面的不是一个长括号,这就是一个短注释,它的作用范围直到行末; 否则就是一个长注释,其作用范围直到遇到反的长括号。
四、值与类型
lua是一种动态类型语言,变量无类型,值有类型。所有值都可以放进变量里当作参数传到另一个函数中。Lua 中有八种基本类型: nil 用于区分具有一些数据或没有(nil)数据的值。
boolean 包括true和false值。一般用于条件检查。
number 表示真实(双精度浮点数)的数字。
string 表示字符数组。
function 表示是用C或Lua语言的方法。
userdata 表示任意C数据。
thread 独立的执行线程,它是用来实现协程。
table 代表普通数组,符号表,集合,记录,图,树等,并实现关联数组。它可以容纳任何值(除了nil)。Nil 类型只有一种值 nil (等同于null),它的主要用途用于标表识和别的任何值的差异; 通常,当需要描述一个无意义的值时会用到它。 Boolean 类型只有两种值:false 和 true。 nil 和 false 都能导致条件为假;而另外所有的值都被当作真。 Number 表示实数(双精度浮点数)。 (编译一个其它内部数字类型的 Lua 解释器是件很容易的事;比如把内部数字类型改作 单精度浮点数或长整型。参见文件 luaconf.h 。) String 表示一串字符的数组。 Lua 是 8-bit clean 的: 字符串可以包含任何 8 位字符, 包括零结束符 (‘\0’)
table 类型实现了一个关联数组。也就是说, 数组可以用任何东西(除了nil)做索引,而不限于数字。支持以 a.name 的形式表示 a[“name”],table 的域中也可以放函数。
五、变量
Lua 中有三类变量:全局变量,局部变量,还有 table 的域。任何变量都被假定为全局变量,除非显式的以 local 修饰定义,局部变量只能在本身的脚本内部使用。在变量的首次赋值之前,变量的值均为 nil(等同于null)。
local d , f = 5 ,10 --declaration of d and f as local variables.
d , f = 5, 10; --declaration of d and f as global variables.
d, f = 10 --[[declaration of d and f as global variables.
Here value of f is nil --]]
lua中可以有多个左值被多个右值赋值,d的值是5,f的值是10
local a , b = 30 , 10;
a , b = b , a;
--[[a = 10 , b = 30 --]]
六、数据类型
在Lua中有一个叫做函数类型,使我们能够知道变量的类型。
print(type("What is my type")) --> string
t=10
print(type(5.8*t)) --> number
print(type(true)) --> boolean
print(type(print)) --> function
print(type(type)) --> function
print(type(nil)) --> nil
print(type(type(ABC))) --> string
七、运算符
lua的算术运算符除了基本的+-*/%还有指数运算符‘^’,取反运算符‘-’。
lua的逻辑运算符
运算符 | 描述 | 示例 |
---|---|---|
and | 所谓逻辑与运算符。如果两个操作数都是不为零,则条件成立。 | (A and B) 为 false. |
or | 所谓逻辑OR运算符。如果有两个操作数是不为零,则条件变为真。 | (A or B) 为 true. |
not | 所谓逻辑非运算符。用于反转操作数的逻辑状态。如果一个条件为真,则逻辑非运算符将返回false。 | !(A and B) 为 true. |
还有其他的运算符
运算符 | 描述 | 示例 |
---|---|---|
.. | 连接两个字符串。 | a..b 当a的值为 “Hello ” 以及b的值为 “World” ,会返回 “Hello World”. |
# | 一个一元运算符返回一个字符串或一个表的长度。 | “Hello” 会返回 5 |
八、循环
while循环
while(condition)
do
statement(s)
end
for 循环
for init,max/min value, increment
do
statement(s)
end
repeat···until循环
repeat
statement(s)
until( condition )
类似foreach的循环遍历,实质上是用了泛型:泛型for循环通过一个迭代器函数来遍历所有值,类似java中的foreach语句(具体说的是啥,我也不太明白,等我把c#吃透就差不多了)
for i,v in ipairs(a) do print(v) end
九、决策(判断)
if语句
if(boolean_expression)
then
--[ statement(s) will execute if the boolean expression is true --]
end
if···else语句
if(boolean_expression)
then
--[ statement(s) will execute if the boolean expression is true --]
else
--[ statement(s) will execute if the boolean expression is false --]
end
十、函数
定义函数体
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separated end
lua的函数也可以做js的闭包
函数与变量参数
function average(...)
result = 0
local arg={...}
for i,v in ipairs(arg) do
result = result + v
end
return result/#arg
end
print("The average is",average(10,5,3,4,5,6))
结果是
The average is 5.5.
十一、数组
lua的索引通常开始于1,也就是说数组的第一个元素就是key==1的元素。