lua_の_进阶总结之基础篇
接触lua有一段时间了,但总觉得编程能力上不去,最近在一边回顾,一边看别人总结的博客,于是整理了一下。只记一些认为需要记录的,最好的学习方式还是看书。此处多谢网络分享的朋友。
【21个关键字】
and break do else else if end false for function if
in local nil not orrepeat return then true until while
【8种基础类型】
nil: 空 (可以用来删除一个元素)
boolean: 布尔
number: 数字
string: 字符串
function: 函数
table: 表
userdata: 定义数据类型
thread: 线程
【type】用函数type来检测一个变量的类型。
如类型测试:
print(type(var))
var = 20 print(type(var))
var = "Hello world" print(type(var))
var = print print(type(var))
var = {} print(type(var))
【string类型】
[[]]来处理转义定义字符串,括号中间可以加 若干个"="号,如 [==[ ... ]==]
下面的语句所表 的是完全相同的字符串:
a = 'alo\n123"'
a = "alo\n123\""
a = '\97lo\10\04923"'
a = [[alo
123"]]
a = [==[
alo
123"]==]
【连字符】
需要连接两个字符串用连接操作符".."( 类似C语言中的strcat )
eg: print("hello".."world")
【取长度】
"#"获取字符串的长度。
eg: a = "hello world"
print(#a)
或string库函数
a = "Hello world" print(string.len(a)) (貌似这个函数最新版本的lua不再支持了)
【table = 数组+映射】
1)数组
①a = {}
a[1]=1
a[2]=5
a[3]="hello"
print(a[1],a[2],a[3])
②a = {1,5,"hello"}
print(a[1],a[2],a[3])
这两种定义方式效果一样。
2)映射
类似于C语言中的map,[]里面的是key值。(数据库的table)
①a= {}
a["hello"]=2
a[3]=false
print(a.hello,a[3])
②a={["hello"]=2,[3]=false}
print(a.hello,a[3])
这两种定义方式效果一样。
【逻辑运算符】
and(与) or(或) not(非 )
【局部变量】
i = 10 -- 全局变量
local j = i -- 局部变量
【控制语句】
1)if...then...else 如:
if a>b then
else if a>c then
else
end
lua中不支持switch语句,条件判断只有if语句。
2)while 如:
while a<5 do
a = a + 1
end
3)repeat...until
Lua中的repeat语句类似于C语言中的do...while语句,先执行一次再判断条件是否满足。
local i = 0
repeat
i = i + 1
print(i..", ")
until i>3
--输出为1,2,3,4
【迭代循环】
①数字for循环
for var = from,end,step do
loop-part
end
表示从from到end,每次递增step。step参数如果不设置的话默认为1。
注:for循环的参数为表达式或者函数调用时,只会调用一次
eg:倒序输出整数10到1。
for i=10,1,-1 do
print(i)
end
②泛型for循环,类似于C++中的迭代器(iterator)
io.lines用于遍历每行; pairs迭代table元素; ipairs用于迭代数组元素; string.gmatch用于迭代字符串中的单词。
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
for k,v in pairs(days) do
print(v)
end
pairs遍历的结果是散列的,随机的。
a = {
["foo"] = 1,
[100] = true,
[1] = 20,
[2] = 30,
}
for k,v in ipairs(a) do
print(k,v)
end
编译结果为:1 20
2 30
原因:ipairs只遍历数组,pairs遍历数组+映射。
5)控制语句break与return
break 用于退出当前循环(for, repeat, while) ——循环外不可使
return 用来从函数返回结果,当一个函数自然结束,尾部会有 个默认的return。
tip: Lua要求break和return只能出现在block的结尾句
【函数】
函数的目的:封装、抽象
封装是为了隐藏细节
抽象是为了便于理解和重复使用
1) 函数定义方法
function func()
end
func = function() end --注意:end不可以另起一行
以上两种函数定义方法效果一样
2)在Lua语言中函数可以当做一个值赋给变量。
add = function(a,b) --把函数赋给add
return a+b
end
foo = add --把函数赋给foo
print(foo(1,5))
Lua的多返回值
function add(a,b)
return a+b,a-b
end
print(add(1,5)) -->结果为6 -4
多变量赋值
a,b = 1,2
a,b = b,a
print(a, b) -->2,1
3)函数的参数
Lua中函数的参数可以有任意多个。
当给函数传递参数时超过了函数定义的形参个数,那么多余的参数会被丢弃。
function sum (a, b)
return a + b
end
print(sum(10, 20, 30)) ——结果为30,自动把多余的参数30丢弃
传入的参数形参少,那么缺少的形参的值默认为nil
function sum (a, b)
return a + b
end
print(sum(10)) ——结果为0,相当于10+nil=10
4)可变参数
function add( ... )
local s = 0
for i,v in ipairs{...} do
s = s + v
end
return s
end
print(add (1,2,3,4,5)) --运行结果为15
5)闭包函数
闭包函数是指将一个函数写在另一个函数之内,内部函数可以访问外部函数的局部变量。内部函数没有名称,通常也叫匿名函数。
function newCounter()
local i = 0
return function()
i=i+1
return i
end
end
c1 = newCounter()
print(c1()) --> 1
print(c1()) --> 2
微信搜索【水勺子】关注我,获取更多详细信息