一、变量
Lua有8个基本类型:无效值nil、布尔值boolean、数number、字符串string、函数function、自定义类型userdata、线程thread、表table。
无需声明一个变量就可使用,不过在赋值之前,变量的值为nil,表示不存在。
Lua为动态类型语言,变量的类型可以动态改变。
print(a) -- nil
print(type(a)) -- nil
a= 1
print(a) -- 1
print(type(a)) -- number
a= "abc"
print(a) -- abc
print(type(a)) -- string
一些要注意的点
number
所有数字都是双精度浮点数。
nil
虽然nil
的类型是nil
,但是type(nil)
返回的是字符串"nil"
。
string
拼接字符串使用..
而不是加号。1+"1"
会得到2.0
。
table
table是key-value形式的表,可以嵌套。
初始化格式tb = {[key1] = value1, [key2] = value2, ...}
,如tb = {["a"] = "hello", ["b"] = {1, 2, 3}}
。
使用tb[key]
来取对应的value值,表中没有的项会返回nil
;使用tb[key] = value
的形式来更新表。
数组
Lua中数组的本质是一个table。
使用tb = {"a", "b", "c"}
的形式初始化一个数组,等同于tb = {[1] = "a", [2] = "b", [3] = "c"}
。
要注意数组的序号是从1开始的,并且数组中元素的数据类型不需要一致。
变量作用域
变量默认是全局的,一处定义到处使用。
使用local
关键字修饰变量,可以将其变为局部变量。
二、循环
2.1 for
循环有两种方式:数值循环和迭代循环。
2.1.1 数值循环
数值循环格式:
for i = 起始值, 结束值, 间隔值 do
-- statements
end
其中,间隔值为1的时候可以省略。
2.1.2 迭代循环
遍历表tb
:
tb = {["a"] = "hello", ["b"] = 2}
for k,v in pairs(tb) do
print(k, v)
end
其中,pairs
为内置函数,提供了table
的迭代器。
2.2 while
while格式:
while(condition)
do
-- statements
end
2.3 repeat-until
repeat-until格式:
repeat
-- statements
until( condition )
三、条件语句
格式:
if(cond1) then
-- statements
elseif(cond2) then
-- statements
elseif(cond3) then
-- statements
...
else
-- statements
end
四、函数
函数的形式
function
类型的变量有两种定义方式,二者等价。调用的时候记得加括号,不然就是一个普通的变量。
function foo()
print("hello")
end
foo() -- hello
bar = function()
print("hello")
end
bar() -- hello
有几点需要注意:
- 函数可以嵌套;
- 函数默认是全局的,即使是嵌套在其他函数中;如果要定义局部函数,使用
local
关键字。
例:
function a()
print("a")
function b()
print("b")
end
c = function()
print("c")
end
local function d()
print("d")
end
end
a() -- a
b() -- b
c() -- c
d() -- 报错,局部函数外部不能访问
返回值
Lua函数可以返回多个结果
function foo()
return "hello", "world"
end
可变长参数
使用...
表示可变长的参数。
使用pairs{...}
来获取变长参数的迭代器。
使用select("#", ...)
来获取传入的可变长参数个数。
f = function(...) -- 可变参数函数
print("一共有"..select("#", ...).."个参数")
for k, v in pairs{...} do
print(k..": "..v)
end
end
f("a", "b", "c")
输出
一共有3个参数
1: a
2: b
3: c
五、运算符
数学运算:
+、-、*、/:加减乘除
%:求余
^:求幂
关系运算:
==:等于
~=:不等于
>、<、>=、<=:大于、小于、大于等于、小于等于
逻辑运算:
and:与
or:或
not:否
其他:
..:字符串连接
#:返回字符串或表的长度
网友评论