Fork Me
lua入门
29 May 2015 - by @ssdr

lua是一门动态类型语言。这意味着变量没有类型,只有值才有类型。语言中不设类型定义,所有的值携带自己的类型。在lua中,除了关键字,一切都是变量。

###注释 单行注释:连续两个减号‘--

多行注释:由‘--[[’开始,‘]]’结束

###关键字 and break do else elseif end false for function if in local nil not or repeat return then true until while

###变量 lua支持的变量类型

Nil 空值,所有没有用过的变量都是nil,nil即是值也是类型
Boolean true或者false
Number 相当于c的double
String 可以包含也可以不包含‘\0'
Table 关系表类型
Function 函数类型
Userdata 专门用来和lua的宿主程序打交道,常用的是struct或指针
Thread 线程类型

在lua中不管在什么地方使用变量,都不需要声明,并且所有的变量默认都是全局变量,除非显示指定local关键字。

####String 以下表示的是完全相同的字符串:

a = 'alo\n123"'
a = "alo\n123\""
a = '\97lo\10\04923"'
a = [[alo
123"]]
a = [==[
alo
123"]==]

####Table 关系表类型是一个很强大的类型,你可以把它看成是一个数组,不过不同于c数组只能用正整数来作索引,lua中可以用任意类型作为Table的索引,除了nil。另外,不同于c数组内容只允许一种类型,lua中允许任意类型作为Table内容,除了nil。

T["John"] = {Age=27, Gender="Male"} 等价于
T["John"] = {}
T["John"]["Age"] = 27
T["John"]["Gender"] = "Male"

当表的索引是字符串的时候,可以简写为

T.John={}
T.John.Age = 27
T.John.Gender = "Male"

或者

T.John{Age=27, Gender="Male"}

复杂一点的Table:

T = {
10, --相当于[1] = 10
[100] = 40,
John = {
	Age = 27,
	Gender = Male
	},
20 --相当于[2] = 20
}

####Function 定义简单:

function add(a, b)
	return a+b
end

等价于

add = function(a, b) return a+b end

可以返回多个结果:

function s()
	return 1,2,3,4
end

a,b,c,d = s() --此时,a=1,b=2,c=3,d=4

###lua编程 lua语句可以用分号’:‘隔开,也可以用空白隔开

####if if condition then … elseif condition then … else … end

例如

if 1+1~=2 then
	print("true")
elseif 1+2~=3 then
	print("true")
else
	print("false")
end

####while while condition do … end

####repeat repeat … until condition

####for for var=init, end, step do … end

for var1, var2, ..., varn in tables
do
	...
end

例如

for i=1, 10, 2
do
	print(i);
end

for a, b in list
do
	print(a, b)
end

步进step省略时,使用默认值1。break可以用来终止当前循环。

###与c的不同 ####语句块 c中使用’{‘和’}’括起来,在lua中使用doend括起来。

####赋值语句 lua中赋值更强大,例如

a,b,c,d=1,2,3,4
a,b=b,a

变量默认都是全局的,局部变量在首次赋值时使用local

####数值运算 除了c中的+,-,*,/,lua中还多了一个指数乘方运算”^“,比如2^3=8。

连接两个字符串可以使用”..“,例如,”this is a “ .. “string”连接后是“this is a string”。

####比较运算 <, >, <=, >=, ==, ~=这些运算符总返回true或false。

Table,Function,Userdata类型的数据只有==,~=两个比较运算,相等表示两个变量引用的是同一个数据。

####逻辑运算 and,or,not

在lua中,只有false和nil才被计算为false,其他任何数据都计算为true,包括0

and和or的运算结果不是true或false,而是和两个操作数相关,比如

a and b: 如果a为false,则返回a;否则返回b
a or b:如果a为true,则返回a;否则返回b

x = x or v:相当于
if not x then x = v end

参考这里