注释
--单行注释
--[[ ]]-- 多行注释
--数据类型
nil
boolean nil,false 为假,其他为真
number 全部以双精度浮点型存储
string
function
table
userdata 表示任意存储在变量中大的c数据结构
thread 表示执行的单独线程,用于执行协同程序
tosting,tonumber方法,用于转换你字符串和数字
.. 用于拼接字符串
a="5"
b=5;
print((tonumber(a)+2).."字符串转换数字");
print(tostring(b),"数字转换字符串")
print(type(a))
变量
a=5;--全局变量
local b=5--局部变量
--变量个数<值个数:自动忽略
--变量个数>值个数 :自动补nil
-- while循环 每次循环前先检查循环条件,如果为true,一直执行下去
while(false)
do
print("循环一直执行");
end
-- if else 语句
if (false) then
print("if语句");
elseif("a") then
--print("a")
else
print("else语句")
end
--for循环语句
for i=1,101 do
--print(i)
end
mtable={"a",f,b="b","c",d="d",c=function()
-- body
print("c");
end}
mtable1={ss="sss",f,[1]=1,[2]=2,3,4,5,6,"ss"}
--mtable.c=5;
for i,v in ipairs(mtable) do
--print(i,v)
end
for k,v in pairs(mtable1) do
print(k,v)
end
--[[
ipairs和pairs的区别
1.
索引必须是从1开始的连续整数123456
如果索引断开,则终止遍历
2.
遍历是随机的,但会遍历整个表,先输出数字类型的kay的值,然后输出哈希表键值对
遍历完成所有的表,则终止遍历
]]--
--repeat..until循环 条件语句在当前循环结束后判断
local num = 1
repeat
num=num+1;
print(num)
until(num>1)
--function 函数
--[[optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
optional_function_scope: 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。
function_name: 指定函数名称。
argument1, argument2, argument3..., argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
function_body: 函数体,函数中需要执行的代码语句块。
result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。
]]--
-- ...为可变参数实际是一个数组,可以把他放在一个表中进行调用
-- select("#",...)可以获得可变参数的数量
-- #a可以查看一个表的数量个数
function max( ... )
local a = {...}
print(#a)
print(select("#",...))
if a[1]>a[2] then
print(a[1])
else
print(a[2])
end
end
max(1,2);
--关系运算符
==
~= 不等于
>=
<=
>
<
--多维数组
array={};
for i=1,3 do
array[i]={}
for j=1,3 do
array[i][j]=i*10+j
end
end
for i=1,3 do
for j=1,3 do
print(array[i][j])
end
end
--Lua table(表)
--[[table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
Lua table 是不固定大小的,你可以根据自己需要进行扩容。
Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string。
]]--
--初始化表
mytable={[2]="fff"}
--指定值
mytable[1]="ss";
--移除引用,lua回收会释放内存
--mytable=nil;
print(type(mytable[1]))
--concat连接表
print(table.concat(mytable,","),2,3)
--排序sort
mytable={3,2,5,4}
table.sort(mytable)
for i,v in ipairs(mytable) do
print(i,v)
end
--require 加载模块 返回的是一个table
--元表
-- __index的使用
--当表中没有此元素的时候,如果有元表,会去查找元表的__index;
mytable = {a=6} -- 普通表
mymetatable = {c=5} -- 元表
mymetatable.__index=mymetatable; --把__index设置为自身
setmetatable(mytable,mymetatable) -- 把 mymetatable 设为 mytable 的元表
print(mytable.c);
-- __newindex 更新操作
mytable={key="value"};
mymetatable={};
setmetatable(mytable,{__newindex=mymetatable})
mytable.b="b";
print(mytable.b,mymetatable.b);
--在给表中没有的键赋值时,会首先调用__newindex
--如果时有键的值,则可以直接修改
-- __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, 2, 3 }, {
__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 = {4,5,6}
mytable = mytable + secondtable
for k,v in ipairs(mytable) do
print(k,v)
end