在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转自:https://www.cnblogs.com/reblue520/p/10767428.html 编写一个简单的hello world程序 test.lua
如果觉得简单,可以给一个for循环,打印1~10 正常执行,说明lua环境安装没有问题
二.lua语言的基本语法
数值: 1,2,3 1.2 3.14 字符类型 "hello world"
Table类型 --lua的table,不需要预定义长度,保证数组在首次赋值的时候在最大索引加1 --没有类型限制 --下标从1开始,自动扩容 --table = 数组+映射
--第一种写法 a={} a[1]=10 a[2]=20 a[3]="hello" print(a[1],a[2],a[3])
--第二种写法 a={ 10, 20, "hello" } print(a[1],a[2],a[3]) -- 映射的另外写法 a = {} a["hello"]=2 a[3]=false print(a.hello, a[3])
--别的写法
a={ ["hello"]=2, [3]=false, } print(a.hello,a[3])
-- 加法函数 function add(a,b) return a+b end --调用函数 print(add(1,2))
--调用函数不同的写法 function add(a,b) return a+b end
a = add(1,2) print(a)
--另外的写法 add = function(a,b) return a+b end
foo =add
print(foo(1,2)) --函数返回多个值,返回加法和减法
function add(a,b) return a+b,a-b end
print(add(1,2))
a,b = 1,2 print(a,b)
--交换变量 a,b = b,a
-- 默认值为nil a,b = 1
-- 多余的值会忽略 a,b = 1,2,3
a= 1 + 1 print(a)
a=1 b=2 print((b+2)*3)
-- lua没有 ++ c = 1 c = c + 1 print(c) 5. lua的逻辑表达式 --and 两个都为true,返回true,否则返回false --or 任意一个为true,返回true --not 取反 print(true and false)
6. lua拼接字符串,使用 两个点号 ..
print("hello".." world")
7. --lua变量的范围
-- 全局变量 function foo() a = 1 -- 全局变量 end
foo() print(a) -- 为1
-- 局部变量 一般使用local关键字修饰 ,我们在lua开发中应该尽量使用local局部变量
function foo() local a = 1 -- 局部变量,local为作用域控制关键词,分隔开,利于阅读,还有优化作用 end
foo() print(a) -- 为nil
8. lua的流程控制,判断和循环
-- 老段子:老婆,包子和西瓜 -- 老婆打电话给程序员老公打了个电话:下班顺路买一斤包子回来,如果看到卖西瓜的就买一个 -- 当天晚上回来程序员带回来一个包子,老婆怒道:你怎么就买了一个包子,程序员:因为我看到了卖西瓜的啊
-- 当看到卖西瓜的就买一个包子,没有看到卖西瓜的就买1公斤包子 if foundWatermelon() then buy("baozi","1") else buy("baozi","1kg") end
a.while循环,循环打印0-9
local i = 0 while i < 10 do print(i) i = i + 1 end
--lua的for数值遍历 --for (int i = 0;i < 10; i ++) --{ -- printf("%d\n",i); --}
--打印1到10 for i = 1,10 do print(i) end
--等价于
for i = 1,10,1 do print(i) end
-- 倒叙打印 for i = 10,1,-1 do print(i) end b. lua的for泛型遍历 for的泛型遍历: pairs() ipairs() 迭代器 -- pairs是内部的函数,功能就是可以把一个table里面的所有部分 全部遍历 a= { ["foo"]=1, [100]=true, [1]=20, [2]=30, } for k,v in pairs(a) do print(k,v) end
-- ipairs 功能变化了,只遍历数组部分 a= { ["foo"]=1, [100]=true, [1]=20, [2]=30, } for k,v in ipairs(a) do print(k,v) end 三、lua的包管理 -- lua的包(package)
local c = require("foo") -- 作为文件名搜索,默认搜索当前目录 print(c) print(c.foo(1,2))
-- foo.lua 的代码
local class={}
function class.foo(a,b) return a + b end
-- 另外的写法,class的映射:class.foo,foo键的 值为一个函数 --class.foo = function (a,b) -- return a + b --end
-- lua的一个特点,可以把全局代码当做一个值返回 return class
-- 美化后
local socket = require("foo") -- 作为文件名搜索,默认搜索当前目录 print(socket) print(socket.send(1,2))
-- fooo.lua
local class={}
function class.send(a,b) return a + b end
-- 另外的写法,class的映射:class.foo,foo键的 值为一个函数 --class.foo = function (a,b) -- return a + b --end
-- lua的一个特点,可以把全局代码当做一个值返回 return class
-- require 加载文件,运行,推荐使用 -- dofile --加载并运行,可以多次加载,老的写法 -- lua从5.3 以后没有dostring功能了
print("require") for i = 1,2 do print(require("foo")) end
print("dofile") for i = 1,2 do print(dofile("foo.lua")) end
-- 运行结果
E:\software\lua5.3>lua53.exe test.lua require table: 008182a8 -- table相同,表示同一个 table: 008182a8 dofile table: 00817c68 table: 0081e350
lua的系统库
-- 批量插入table键值 local t = {} for i = 1,10 do table.insert(t,i) end
for k,v in pairs(t) do print(k, v) end
print(t) -- 删除数组中的元素 table.remove(t,2)
-- 循环打印table 结果:
for k,v in pairs(table) do print(k, v) end E:\software\lua5.3>lua53.exe test.lua table: 00eb87d0 move function: 69e96240 sort function: 69e96ee0 insert function: 69e96720 remove function: 69e96550 concat function: 69e96890 unpack function: 69e95e30 pack function: 69e95fa0
--删除元素的另外写法
local t = {} t.a = 1 t.b = 2
-- 删除一个值 t.a = nil
for k,v in pairs(t) do print(k, v) end
获取lua中对象的长度
-- # 可以获取对象的长度,对象一般指的就是字符串和table
local t = {5, 1 ,3 ,4, 12} local s = "hello world" -- 得到table的长度 print(#t) -- 取字符串的长度 print(#s)
-- type获取类型 print(type(s))
-- 字符转换为数字 local a = tonumber("3.14") print(a, type(a))
-- 数字转换为数字 local b = tostring(3.14) print(b, type(b))
-- string.format 把一个字符串按照格式构造出来 print(string.format("hi %d", 20))
总结: |
请发表评论