1.变量定义:
num = 2+2
num = "2"+2
num = "2"+"2"
str = "string"..'string'
str = [[
string
]]
2.定义表格:
tab = {k="kk",v="vv"}
tab = {k="kk","vv"}
tab = {"kk"."vv"}
tab = {}
tab["key"] = "xiaolang"
print(tab["key"]) xiaolang
print(tab.key) xiaolang
3.程序循环: break跳出
for循环:
for i=1,10,2 do
print(i)
end 1,3,5,7,9
for i=1,5 do
j=j+i
print(j)
end 1,3,6,10,15
t = {a=100,10,20,[5]=30}
for key,value in ipairs(t) do
print(key,value)
end 1 10,2 20 (ipairs遇到nil停止,需要下标、用于迭代 array 形式的 table)
for key,value in pairs(t) do
print(key,value)
end 1 10,2 20,a 100,5 30 (pairs完全遍历, pairs 可以用来迭代字典形式的 table)
while循环:
while(i<5)
do
print(i)
i=i+1
end
repeat...until 循环:
i=0
repeat
print(i)
i=i+1
until( i>5 )
4.Function方法+If判断:
function factorial(n)
if n == 0 then
return 1
else
return n * factorial(n - 1)
end
end
print(factorial1(5)) 120
5.协同程序(coroutine)+ 线程(thread):
在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
userdata(自定义类型):
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
6.模块编辑:
-- 文件名为 module.lua ,之后定义一个名为 module 的模块
module = {}
module.constant = "常量"
-- 定义一个函数
function module.function1()
io.write("公有函数!")
end
local function function2()
print("私有函数!")
end
function module.function3()
function2()
end
return module
调用模块:
require("module")
print(module.constant)
module.function3()
7.Lua 查找一个表元素(Metatable)时的规则:
1.在表中查找,如果找到,返回该元素,找不到则继续
2.判断该表是否有元表,如果没有元表,返回 nil,有元表则继续。
3.判断元表有没有 __index 方法,如果 __index 方法为 nil,则返回 nil;如果 __index 方法是一个表,则重复 1、2、3;如果 __index 方法是一个函数,则返回该函数的返回值。
初始化:mytable = setmetatable({},{}) >>>>> mytable = setmetatable({key1 = "value1"}, { __index = { key2 = "metatablevalue" } })
返回对象元表:getmetatable(mytable) >>>>> print(mytable.key1,mytable.key2)
8.定义原方法:__add (两个英文下划线)
function table_maxn(t)
local mn = 0
for k, v in pairs(t) do
if mn < k then
mn = k
end
end
return mn
end
-- 两表相加操作 ****重要操作****
mytable = setmetatable({ 1, 3, 2 }, {
__add = function(mytable, newtable)
for i = 1, table_maxn(newtable) do
table.insert(mytable, table_maxn(mytable)+1,newtable[i])
end
return mytable
end
})
secondtable = {6,5,4,7}
mytable = mytable + secondtable
for k,v in ipairs(mytable) do
print(k,v)
end 1 1,2 3,3 2,4 6,5 5,6 4,7 7
9.coroutine:(协程逻辑)
local newProductor
function productor()
local i = 0
while true do
i = i + 1
print("aaa")
send(i) -- 将生产的物品发送给消费者
print("fff")
end
end
j=0
function consumer()
while j<10 do
j=j+1
local i = receive() -- 从生产者那里得到物品
print(i)
end
end
function receive()
print("ccc")
local status, value = coroutine.resume(newProductor)
return value
end
function send(x)
print("bbb")
coroutine.yield(x) -- x表示需要发送的值,值返回以后,就挂起该协同程序
end
-- 启动程序
newProductor = coroutine.create(productor)
consumer()