经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Lua » 查看文章
lua基础
来源:cnblogs  作者:层叠  时间:2019/8/7 8:49:54  对本文有异议
注释
--单行注释
--[[  ]]--  多行注释

--数据类型
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

原文链接:http://www.cnblogs.com/zhanghaodong1/p/11307970.html

 友情链接:直通硅谷  直通硅谷 怎么样 mac软件下载