2、Lua 基本语法

Lua变量

变量

全局变量写法

a = 10
有2个脚本如下:main.lua, test.lua

-- main.lua

print("Hello Lua")
a = 15
dofile("luafile/test.lua")
-- test.lua
print(a)

PS:dofile 表示在一个脚本里面执行另外一个脚本,在脚本main.lua中声明的全局变量 a, 在脚本 test.lua 中可以直接使用。尽量使用本地变量,不要使用全局变量,lua有自动垃圾回收机制,本地变量出了作用域后内存会自动回收,而全局变量在内存中是一直存在的,如果反复定义同一个全局变量,可能就会出现内存泄漏。

执行结果:
在这里插入图片描述

本地变量写法

local a = 10

Lua数据类型

nil 空类型:

  • 用于区分具有一些数据或没有数据的值
  • 全局变量设为nil会交给垃圾回收
    local a = nil
    print(type(a)) --> nil

boolean 类型:

  • 但要注意Lua中所有的值都可以作为条件
  • 除了false和nil为假,其他值都为真,0为真

number 类型:

  • Lua中没有整数,都是用浮点数运算
  • 对应c的double类型
  • 新版Lua中有基于64位的整形(5.1之后,ps:带来了性能的开销)
  • tonumber转换格式
-- main.lua

print("Hello Lua");
local a = true;
local b = tonumber("1001")
print(type(a));

string 类型:

  • tostring 转换格式
  • [[]]多行字符串赋值
  • “与c一样的转义"”
  • …字符串拼接
print("Hello Lua");
local a = 123;
local b = tostring(a)
print(type(b));
多行字符串赋值 [[]]
-- main.lua

print("Hello Lua");
local a = 123;
local b = tostring(a)
local html = [[
<html>
</html>
]]
print(html);
字符串拼接 …
-- main.lua

print("Hello Lua");
local a = 123;
local b = tostring(a)
local html = [[
<html>
</html>
]]
html = "test1".."test2=".. a;
print(html);
string 处理
  • 字符串长度 string.len
  • 字符串子串 string.sub(str,3,5)
  • 字符串查找 local b,e = string.find(str,“HEAD”) 支持正则
  • 字符串替换 string.gsub(str,“HEAD”,“XCJ”) 支持正则
  • ps:下标是从 1 开始的
-- main.lua

print("Hello Lua");
local a = 123;
local b = tostring(a)
local html = [[
<html>
</html>
]]
local n = nil;
local str = "test1".."test2=".. a;
print("string len = "..string.len(str));

--裁剪字符串
print("string sub = "..string.sub(str, 3, 5));

--查找字符串(这里返回了2个值)
local b,e = string.find(html,"html");
print("b = "..b.."  e = "..e);

--替换字符串
local gsubstr = string.gsub(str,"te","ss");
print(gsubstr);

Lua控制结构语句

if 条件语句

-- if语句 用法示例
-- 判断符号:<	>	<=	>=	~=	==
if((1==1 and 1==3) or 3==3) then
	print("1 = 1")
elseif (2==2) then
	print("2==2")
else
	print("in else")
end

while循环语句


-- while语句 示例代码
-- ps: 没有 continue

local i = 100
while (not(i < 0)) do
	print("i = "..i)
	i = i - 1
	if(i == 90) then
		print("break while")
		break
	end
end

repeat 循环语句

--[[
repeat语句 示例代码
--]]
local i = 100
repeat
	i = i + 1;
	print("i = "..i)
until i > 110

for 循环语句


-- for循环语句 示例代码
-- 数值循环 从1到5,步数为1
-- ps:最后一个1代表步数,可以省略,默认为1
for var = 1,5,1 do
	print("var = "..var)
end


-- 范型循环:pairs遍历全部 ipairs遍历数组
local tab = {[1] = "A", [2] = "B", [4] = "D"}

print("------------------------------------------ ipairs for tab")
-- ipairs 当做标准的数组来进行遍历访问,只能打印出1,2
-- ps:ipairs 效率更高
for i,v in ipairs(tab) do
	print(i.."="..v)
end

print("------------------------------------------ pairs for tab")
-- pairs 遍历全部,可以打印出 1,2,4
for i,v in pairs(tab) do
	print(i.."="..v)
end

在这里插入图片描述

Lua表和函数语法

Lua表处理

  • 表的大小 tabel.getn(t1)
  • 插入 table.insert(a,pos,line),ps:不传pos相当于push_back
  • 删除 table.remove(a,pos) 返回这次删除的值,ps:不传pos相当于pop_back

-- 示例1
print("=========== tab1 ===========")
local tab1 = {"001", "002", "003"}
for i,v in ipairs(tab1) do
	print("value = "..v)
end

print("=========== insert ===========")
table.insert(tab1,3,"002-2")
for i,v in ipairs(tab1) do
	print("value = "..v)
end

print("=========== insert back ===========")
table.insert(tab1,"004")
for i,v in ipairs(tab1) do
	print("value = "..v)
end

print("=========== remove ===========")
table.remove(tab1,3)
for i,v in ipairs(tab1) do
	print("value = "..v)
end

print("=========== remove back ===========")
table.remove(tab1)
for i,v in ipairs(tab1) do
	print("value = "..v)
end

print("-------------------------------------------------------")

-- 示例2(哈希表)
print("=========== tab2 ===========")
local tab2 = {id=123,age=20}
--插入
tab2["name"] = "xiaoming"
for k,v in pairs(tab2) do
	print(k.." : ".. v)
end

print("=========== delete item ===========")
--删除
tab2["id"] = nil
for k,v in pairs(tab2) do
	print(k.." : ".. v)
end


print("-------------------------------------------------------")
-- 示例3 (二维数组)
local tab3 = {}
tab3[1] = {"name1","name2"}
tab3[2] = {"value1","value2"}

for k,v in pairs(tab3) do
	for k2,v2 in pairs(v) do
		print("k2="..k2," v2="..v2)
	end
end

Lua函数

函数语法

function func_name(arguments-list)
	statements-list;
end;

参数

  • 普通参数

-- defining the funciton
function test(p1,p2)
	if(p1 == nil) then
		p1 = "001"
	end
	if(p2 == nil) then
		p2 = "002"
	end
	
	print("p1="..p1.." p2="..p2)

--可以返回多个值
	return 1,"name"
end

-- calling the function
test(5,6)

  • 可变参数

-- defining the funciton
function test(...)
	
	local len = table.getn(arg)
	print("args number = "..len)

	for a=1,len do
		print("arg"..a.." = "..arg[a])
	end
	
end

-- calling the function
test(1,2,3)
  • 函数传给变量

-- 把函数传给变量

local func = function(p1)
	print("func = ".. p1)
end


func("key")

函数覆盖


-- 第一个test函数
function test(p1)
	print("test 1")
end

-- 这个test函数将会覆盖掉上面的test函数
-- ps:别这么用
function test(p1,p2)
	print("test 2")	
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值