特性
- 轻量 文件较小,方便写入
- 可扩展、扩展机制简单、宿主语言提供功能Lua使用
- 支持 ”面相对象编程“ table
- 支持 面相过程编程 和 函数式编程
- 自动的内存管理
- table属于 通用类型:可以实现数组、哈希表、集合、对象等
- 函数 是一种数据类型 function
- 提供 thread (coroutine) 协同程序(unity时间分割)
字符串拼接使用 .. 或者 ,
print(1)
print("Hello World")
print("Hello" .. "World")
print("10" .. "29")
print(10 + 20)
print("10" + "20")
print("a", "b")
print(type("abc"))
print(type('c'))
print(type(true))
print(type(12))
print(type(12.9))
print(type(type))
print(type(print))
print(type(nil))
数据类型
lua 是动态类型语言:变量 不需要指定数据类型,只需要赋值
8个基本数据类型: nil boolean number string function userdata thread table
输出一个没有赋值过的变量
print(a)
在Lua中,false 和 nil 都看做假,其他为真
if false or nil then
print("真")
else
print("假")
end
数字 Number
print(type(2))
print(type(2.1))
print(type(0.99992323))
字符串
str1 = "apple"
str2 = "banana"
str3 = [[rogen]]
str4 = [[
<root>
<head>123</head>
<price>12</price>
</root>
]]
print(str1)
print(str2)
print(str3)
print(str4)
Lua变量
C# 中变量按照作用域划分:局部变量、成员变量、静态变量
Lua变量:全局变量、局部变量、表中域
默认所有的变量都是全局变量;局部变量 要在变量前加 local 关键字;变量默认值都是nil
function func1()
a = 10 -- 全局变量
local b = 20 -- 局部变量
end
func1()
print(a,b)
c = 30 -- 全局变量
local d = 40 -- 局部变量
do
local c = 100
d = 90
print(c, d)
end
赋值语句
Lua 可以同时 对多个变量赋值,变量列表 和 值列表的各个元素直接用逗号隔开
赋值 语句 右边的值依次赋给左边的变量
变量个数 > 值的个数: 按照变量个数补足nil
变量个数 < 值得个数: 多余得值会被忽略
a, b, c = 1, 2, 3
print(a, b, c)
x, y = 10, 20, 30
print(x, y)
m, n, w = 11, 22
print(m, n, w)
While循环
num = 5
while (num >= 1) do
print(num)
num = num - 1;
end
function
用函数返回两个数中的最大值
function getmax(num1, num2)
if num1 > num2 then
return num1
else
return num2;
end
end
将 函数冲当参数 传递给另一个函数
function add(num1, num2, funcprint)
result = num1 + num2;
funcprint(result)
end
function testfunc1(x)
print(x)
end
add(6,3, testfunc1)
myfunc2 = function(y)
print("myfunc2", y)
end
add(10,20, myfunc2)
add(30,50,function(num)
print(num)
end)
遍历table
function functable1(tab, func)
for k, v in pairs(tab) do
print(func(k,v))
end
end
mytab1 = {key = "value1", key2 = "value2", key3 = "value3"}
functable1(mytab1, function(key, value)
return key .."===>".. value
end)
多返回值
function getmax(tab)
local maxindex = 1
local maxval = tab[maxindex]
for k, v in pairs(tab) do
if v > maxval then
maxindex = k
maxval = v
end
end
return maxindex, maxval
end
可变参数
function getaverage(...)
local sum = 0
local arg = {...}
local length = #arg
for k, v in pairs(arg) do
sum = sum + v
end
return sum / length
end
运算符
num1 = 10
num2 = 2
print(num1 + num2)
print(num1 - num2)
print(num1 * num2)
print(num1 / num2)
print(num1 % num2)
print(num1 ^ num2)
print(-num2)
逻辑运算符
x,y = true, false
print(x and y)
print(x or y)
print(not(x and y))
一元运算符#: 返回容器的长度
print(#"Hello World")
print(#{1,2,3,4,5})
数组
一维数组
array = {"C#", "Lua", "C++"}
for k, v in pairs(array) do
print(k, v)
end
print(string.rep("=", 30))
for k, v in ipairs(array) do
print(k, v)
end
print(string.rep("=", 30))
for i = 1,#array do
print(array[i])
end
多位数组
array = {}
function addArray()
for i = 1,3 do
array[i] = {}
for j = 1,5 do
array[i][j] = i * j
end
end
end
function getArray()
for i = 1,3 do
for j = 1,5 do
print(array[i][j])
end
end
end
table也可以解决模块、包、对象等这些问题
table中是有构造的,构造器是创造和初始化的表达式
最简单的构造函数是{},用来创建一张空表
mytable = {}
mytable[1] = "abc"
print(mytable[1])
mytable = nil
print(mytable)
mytable = {}
mytable[1] = "Lua"
mytable["www"] = "修改前"
print("下标为1对应的元素是" .. mytable[1])
print("下标为1对应的元素是" .. mytable["www"])
mytable2 = mytable
print("下标为2对应的元素是" .. mytable2[1])
print("下标为2对应的元素是" .. mytable2["www"])
mytable2["www"] = "修改后"
print("下标为1对应的元素是" .. mytable["www"])
print("下标为2对应的元素是" .. mytable2["www"])
-- 释放变量
mytable2 = nil
print("mytable2的类型:" .. type(mytable2))
print("mytable的类型:" .. type(mytable))
print("下标为1对应的元素是" .. mytable["www"])
mytable = nil
print("mytable的类型:" .. type(mytable))