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)
可以使用双引号,单引号或[[]]来定义字符串,字符串拼接使用..,如:
运行结果
D:\My Work\lua>lua53 string.lua
aaa
bbb
"aaa",'bb'
aaa~=bbb
D:\My Work\lua>
表(table)
lua的表分为两种,一种为数组,一种为映射,对表中的类型,不要求一致
--数组:
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元素个数,如:
以上为Lua常用的基本语法,Lua另外还可以与C函数互相调用,下面会进行研究
对Lua深入学习,可参考:
http://www.lua.org/pil/contents.html
http://moonbingbing.gitbooks.io/openresty-best-practices/content/index.html
数据类型
空类型
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中的表的概念及其相关操作方法
- Lua编程示例(二):面向对象、metatable对表进行扩展
- 把Lua编译进nginx步骤方法
- Lua脚本自动生成APK包
- Lua中的元表(metatable)、元方法(metamethod)详解
- Lua中的metatable介绍
- Lua中ipair和pair的区别
- Lua中的函数精讲笔记
- 浅谈Lua的面向对象特性
- 详解Lua中的变量相关知识点
- Lua脚本语言入门笔记
- Lua脚本调用外部脚本
- 详解Lua中的if语句的使用方法
- Lua中调用函数使用点号和冒号的区别
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中强大的元方法__index详解
- Lua中调用C++函数示例
- Lua面向对象之类和继承浅析
- Lua性能优化技巧(一):前言
- Lua中获取table长度问题探讨