您的位置:首页 > 编程语言 > Lua

Lua语言初识

2015-09-01 22:57 645 查看
近期项目需要,研究openresty,开始学习Lua,对Lua常用的语法进行一个简单总结

数据类型

空类型

nil

所有未赋值的变量都为nil

布尔类型

true/false

nil和false均为false,其它值为true。这点与C/C++不同,C/C++中的0也是false

数值类型

所有的整数和浮点数都为数值类型

字符串(string)

可以使用双引号,单引号或[[]]来定义字符串,字符串拼接使用..,如:

local a = "aaa"
local b = 'bbb'
local c = [["aaa",'bb']]
print(a)
print(b)
print(c)
print(a.."~="..b)

运行结果

D:\My Work\lua>lua53 string.lua
aaa
bbb
"aaa",'bb'
aaa~=bbb

D:\My Work\lua>

表(table)

lua的表分为两种,一种为数组,一种为映射,对表中的类型,不要求一致

<pre name="code" class="plain">


--数组:

ta = {1, 2, "Hello"}

--映射:

tb = {
["Hello"] = "world",
[1] = "Hello"

}

print("数组")

for k, v in ipairs(ta) do
print(k, v)

end

print("映射")

for k, v in pairs(tb) do
print(k, v)

end

运行结果

D:\My Work\lua>lua53 string.lua
数组
1 1
2 2
3 Hello
映射
1 Hello
Hello world

D:\My Work\lua>

与C/C++/java不同,Lua的数组是从1开始索引的,映射则是按照Hash进行索引

函数

函数有两种定义方式,第二种方式有点像Python的Lamda

function foo(a, b)
表达式
end

foo = function(a, b)
表达式
end

变量

Lua是弱类型语言,变量不需要声明类型的,但赋值后可以使用type查看变量的类型,变量可以赋值为上面类型中的任意类型

a = 1
b = 1.1
c = "test"

foo = function(c)
print("Hello "..c)
end
print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(foo))运行结果
D:\My Work\lua>lua53 string.lua
number
number
string
nil
function

D:\My Work\lua>

变量默认为全局,如果要将变量定为局部变量,需要在变量前加上local。加上local的好处,Lua解释器在执行时会对local变量进行优化

function fa()
a = 10
print("in fa a is "..a)
end

function fb()
local b = 11
print("in fb b is "..b)
end

fa()
fb()
print("outside a is "..a)
print("outside b is "..b)
运行结果
D:\My Work\lua>lua53 string.lua
in fa a is 10
in fb b is 11
outside a is 10
lua53: string.lua:14: attempt to concatenate a nil value (global 'b')
stack traceback:
string.lua:14: in main chunk
[C]: in ?

D:\My Work\lua>以上可见,被local修斯的b在外面就是一个nil

table和string类型处理

对table和string,lua提供了一些操作函数,使用下面代码可以查看,具体参数可以自行baidu

print("table内置函数")
for k, v in pairs(table) do
print(k, v)
end
print("string内置函数")
for k, v in pairs(string) do
print(k, v)
end
运行结果
D:\My Work\lua>lua53 string.lua
table内置函数
remove function: 62995270
pack function: 629945c0
unpack function: 62995120
insert function: 62994f90
concat function: 62994df0
move function: 62994330
sort function: 62995430
string内置函数
upper function: 6299d440
dump function: 6299f3c0
gmatch function: 6299db30
rep function: 6299d560
lower function: 6299d730
gsub function: 6299fd00
find function: 6299fcf0
unpack function: 6299e880
byte function: 6299cf90
packsize function: 6299e750
char function: 6299dbc0
pack function: 6299ebd0
sub function: 6299d280
reverse function: 6299d4d0
match function: 6299fce0
len function: 6299cde0
format function: 6299dcf0

D:\My Work\lua>
控制语句
if语句
if 条件 then
表达式
elseif 条件 then
表达式
else
表达式
end

while语句
while 条件 do
表达式
end

for语句1
for语句1类似于C/C++中的for

for i=起始, 结束[, 步进] do
表达式
end起始为i的初值,结束为i的结束值,步进为i每次增加值,不填默认每次加1,填写i则按步进数增长,如果从后往前轮询,只需把步进设置为负数
注意,这里的起始和结束值都会执行,直到i大于结束或小于结束才会退出

for语句2

for语句2类似于python中的for

for k, v in pairs(table变量) do
表达式
end

一些内建函数

print  打印
pairs  Hash迭代,能迭代Table所有元素
ipairs 数组迭代,只能按顺序迭代key为数值的Table,遇到值为nil结束
type   查看变量类型
tonumber     将字符串转为数值
tostring        将数值转为字符串
dofile("foo.lua")   引入foo.lua包
require("foo")     引入foo.lua包,require只会引入一次,dofile会引入多次

运算符
算数运算符
+:加
-:减
*:乘
/:除
^:指数
%:取模
注意:Lua的算数运算符中没有++,--,+=之类的运算符

关系运算符
<:小于
>:大于
<=:小于等于
>=:大于等于
==:等于
~=:不等于
注意:不等于与其他语言有区别,不是!=

逻辑运算符
and:与
or:或
not:非

其它运算符
..:字符串连接
#:对字符串来说是字符串的大小,对于table来说,是table元素个数,如:
a="hello world"
print(#a)
b = {1, 2, 3}
print(#b)
运行结果
D:\My Work\lua>lua53 string.lua
11
3

D:\My Work\lua>


以上为Lua常用的基本语法,Lua另外还可以与C函数互相调用,下面会进行研究

对Lua深入学习,可参考:

http://www.lua.org/pil/contents.html

http://moonbingbing.gitbooks.io/openresty-best-practices/content/index.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Lua