lua语法

一.介绍

 Lua 是一门轻量级、高效、可嵌入的脚本语言,被设计用于扩展应用程序的功能,核心解释器非常小(编译后甚至不到1MB)。Lua 的灵魂是可嵌入C/C++、Java、C# 等主机程序中运行。程序可以通过 Lua 来提供灵活的配置和扩展功能,而无需修改主程序本身的代码。  

 主要应用领域:

    --游戏开发:使用 Lua 来编写游戏逻辑

    --应用程序扩展:Wireshark、Nginx、Redis等使用 Lua 让用户自定义功能或编写插件 

 lua文档首页:https://wiki.luatos.com/index.html

 在线文档:https://wiki.luatos.com/luaGuide/introduction.html 

 由于lua可以直接在浏览器中运行, 这时使用在线文档luatos-->在线体验luatos-->lua测试。

二.语法介绍

  2.1 声明

print("hello world")

--变量声明,与py相似,默认是全局变量
a=1
b=2
-- 加上local就是局部变量,例如在当前代码块或函数
local c=3
--没有被声明过的变量是nil类型,下面的d和f都是nil类型
print(d)
e,f=1
print(e,f)
--可以在一行中声明多个变量
a,c=1,2
print(a,b)
--所有数值型都是number类型,还支持16进制hex, h输出为10
g=1
h=0xa
print(g,h)
--支持科学计数法,如下2后面有10个0, 值为:20000000000.0
j=2e10
print(j)
--支持加减乘除
print(a+c)
--支持幂运算,输出100000
print(10^5)

  2.2字符串

-- 声明字符串,单双引号都可以 
str="aefsef"
str1='我是中国人'
--支持转义字符,下面\n 输出时world已换行
s1="hello\nworld"
print(s1)
--多行文本,输出时也是三行
mutiline=[[你好
    我是
    中国人
]]
print(mutiline)
--字符串连接,例如str连接str1,不是通过相加,而是..
s2=str..str1
print(s2)
--将数字转为字符串
s3=tostring(10)
print(s3)
--将字符串转成数值型
n=tonumber("10")
print(n)
--如果将字符串转成数值型失败,n1值为nil
n1=tonumber("10abc")
print(n1)
--获取字符串长度,在前面加#号,如#str 输出为6
print(#str)

 三.函数

--第一种声明法
function function_name(a,b)
    print(a,b)
end
--第一种声明法
function_name2=function(c,d)
    print(c,d)
end

--调用函数
function_name(1,3)
function_name2(2,4)

--函数返回值,默认返回nil, 可以用return来返回
function function_name3(a)
    return a
end
print(function_name3('hello world'))

--返回多个值
function function_name3(a,b)
    return a,b
end
local i,j=function_name3(1,2)
print(i,j)

四.table表

  table相当于python中的list, 下面代码是通过下标来操作

--table 可以存任意类型,用逗号分隔,第3个存的又是一个table,第4个是匿名函数
table1={1,"ab",{},function() print("我是一个匿名函数") end}
--提取时可以通过索引下标,注意下标从1开始
print(table1[1]) --输出 1
print(table1[2]) --输出 ab
print(table1[4]) --输出 0x154 函数引用的内存地址是16进制,在python中将16转为10进制,int("0x154",16) 输出340
local myFunction =table1[4]
myFunction()
--取没有的下标为nil
print(table1[5])
--可以把table1中继续添加下标
table1[5]='123'
print(table1[5])
--还可以调用table的方法,如插入元素,默认是追加
table.insert(table1, "第6个下标")
print(table1[6])
--插入元素,还可以是指定下标,这样后面的每个元素下标后移一位
table.insert(table1,2,"在2下标插入元素")
--移除命令, 指定下标移除,返回移除的下标值,后面每个的每个元素下标前移一位,
local val=table.remove(table1, 2)
print(val)

  下面table是通过字符串来操作,这样的好处是 避免索引下标变动而错误

--定义table,通过字符串来操作
table1={
 a=1,
 b='1234',
 c=function()

 end,
 d=12345,
 [",;"]=123 --不规范的变量名定义
}
--输出
print(table1["a"])
print(table1.a)
print(table1[",;"])
--添加元素
table1["abc"]=12345
print(table1["abc"])
--没有声明过的下标,读取为nil
print(table1["def"])

5.全局table表

--全局table表 _G  所有全局变量都在_G中
--声明全局变量
a=1
--输出值为1
print(_G["a"])

--平时我们用table.insert来添加指定table的元素, 可以看出table也是一个全局变量
print(_G["table"]) --输出16进制内存地址
print(_G["table"]["insert"])--输出16进制内存地址

6.真和假判断

--布尔型,只有true和false,在lua中只有nil和false代表假
a=true
b=false
print(1>2)
print(1<2)
print(1>=2)
print(1<=2)
print(1==2)
print(1~=2)--不等于判断

-- and(与)、 or(或)、 not(非)
--‌规则‌:如果第一个参数为 false 或 nil,则返回第一个参数;否则返回第二个参数
print(a and b) --false, 两个为true,返回true
print(a or b)  --true ,有一个true,返回true
print(not b)  --true, 取b的相反值。 

--只有not返回true和false, 而and 和 or 不全是返回true和false
a=nil --
b=0 --
print(a and b) --返回nil

print(b>10 and "yes" or "no")--返回no

 7.if分支

a,b=10,4
if a>b then
    print('a大于b')
elseif (a==b) then
    print('a等于b')
else 
     print('a小于b')
end

--0代表真
if 0 then
    print("0 is true")
end

8.循环

  下面是for循环示例

--循环从1开始,到10结束,包含10, 在循环中变量i是不可修改的
for i=1,10 do
    print(i)
end
--循环+ 步长 输出1,3,5,7,9
for i=1,10,2 do
    print(i)
end
--循环 + 步长为负数 ,输出10,9,8...1
for i=10,1,-1 do
     print(i)
end
-- break 退出
for i=1,10 do
    print(i)
    if i==5 then
        break end
end

  下面是while示例

--while循环
local n=10
while n>0 do
    print(n)
    n=n-1
end

--break 退出
local  z = 10
while z>0 do
    print(z)
    if z==5 then
        break end
    z=z-1
end

9.语法补充

--0x30在ASCII编码中对应十进制数值48,代表数字字符'0'
local s=string.char(0x30,0x31)
print(s)--数字字符'0'
 
--0x31对应的十进制数值 输出49
local n=string.byte(s,2)
print(n)

 

  

  

  

 

posted on 2025-09-17 14:32  花阴偷移  阅读(5)  评论(0)    收藏  举报

导航