Lua脚本语法
一、基本语法
1、注释
在 Lua 中,用双横线 --
开头表示注释,它可以在代码中添加对代码的解释和说明。单行注释只能注释一行,而多行注释需要用到 --[[ ]]--
。
-- 这是一行注释
--[[
这是
多行注释
]]
2、变量
在 Lua 中,变量是弱类型的,不需要事先声明类型,直接赋值即可。Lua 支持数字、字符串、布尔值、表等数据类型。
-- 数字
local a = 10
-- 字符串
local b = "Hello World"
-- 布尔值
local c = true
-- 表
local d = { 1, 2, 3 }
3、条件语句
Lua 中的条件语句与其他编程语言类似,支持 if-else
和 switch-case
语句。
-- if-else
if a > 0 then
print("a is positive")
elseif a == 0 then
print("a is zero")
else
print("a is negative")
end
-- switch-case
local day = "Monday"
case = {
["Monday"] = function () print("Today is Monday") end,
["Tuesday"] = function () print("Today is Tuesday") end,
["Wednesday"] = function () print("Today is Wednesday") end,
["Thursday"] = function () print("Today is Thursday") end,
["Friday"] = function () print("Today is Friday") end,
["Saturday"] = function () print("Today is Saturday") end,
["Sunday"] = function () print("Today is Sunday") end,
}
case[day]()
4、循环语句
Lua 中的循环语句包括 while
循环、repeat-until
循环和 for
循环。
-- while 循环
local i = 1
while i <= 10 do
print(i)
i = i + 1
end
-- repeat-until 循环
local j = 1
repeat
print(j)
j = j + 1
until j > 10
-- for 循环
for k = 1, 10 do
print(k)
end
5、函数
在 Lua 中,函数是一等公民,可以赋值给变量、作为参数传递等。定义函数可以使用 function
关键字,函数体中可以包含多条语句,函数可以返回多个值。
-- 定义函数
function add(a, b)
return a + b
end
-- 调用函数
local sum = add(1, 2)
print(sum)
6、表
Lua 中的表是一种非常有用的数据结构,它可以用来表示数组、哈希表等数据结构。在 Lua 中,表可以通过 {}
创建,使用 []
访问元素。
local my_table = {
name = "John",
age = 30,
hobbies = {"reading", "traveling", "hiking"}
}
-- 访问表中的元素
print(my_table.name)
print(my_table.age)
print(my_table.hobbies[2])
-- 修改表中的元素
my_table.age = 31
my_table.hobbies[3] = "swimming"
-- 遍历表中的元素
for k, v in pairs(my_table) do
print(k, v)
end
7、模块
在 Lua 中,模块是一种封装代码的方式,它可以将一些相关的函数、变量和常量组织在一起,方便重用和维护。在 Lua 中,每个模块都是一个表,可以通过 require
加载模块,并使用 return
导出模块中的函数和变量。
-- 定义模块
local my_module = {}
function my_module.add(a, b)
return a + b
end
function my_module.sub(a, b)
return a - b
end
return my_module
-- 加载模块
local my_module = require("my_module")
-- 使用模块中的函数
print(my_module.add(1, 2))
print(my_module.sub(3, 2))
二、常用用法
1、字符串操作
Lua 中的字符串操作非常方便,可以使用 ..
操作符进行字符串拼接,使用 string.format
函数进行格式化输出。
-- 字符串拼接
local str1 = "Hello"
local str2 = "World"
local str3 = str1 .. " " .. str2
print(str3)
-- 格式化输出
local name = "John"
local age = 30
print(string.format("My name is %s and I am %d years old", name, age))
2、文件操作
Lua 中的文件操作非常简单,可以使用 io.open
函数打开文件,使用 io.read
和 io.write
函数读取和写入文件。
-- 打开文件
local file = io.open("test.txt", "w")
-- 写入文件
file:write("Hello World\n")
file:write("This is a test file\n")
-- 关闭文件
file:close()
-- 读取文件
local file = io.open("test.txt", "r")
for line in file:lines() do
print(line)
end
file:close()
3、正则表达式
Lua 中也支持正则表达式,可以使用 string.match
函数进行匹配。
-- 匹配字符串中的数字
local str = "Hello 123 World"
local num = string.match(str, "%d+")
print(num)
4、协程
Lua 中支持协程,可以使用 coroutine.create
函数创建协程,使用 coroutine.resume
函数执行协程。
-- 创建协程
local co = coroutine.create(function ()
for i = 1, 10 do
print(i)
coroutine.yield()
end
end)
-- 执行协程
coroutine.resume(co)
coroutine.resume(co)
5、函数
在 Lua 中,函数是一等公民,可以像其他值一样进行传递和赋值。可以使用 function
关键字定义函数,也可以使用匿名函数和闭包。
-- 定义函数
function add(a, b)
return a + b
end
-- 匿名函数和闭包
local function create_counter()
local count = 0
return function ()
count = count + 1
return count
end
end
local counter = create_counter()
print(counter())
print(counter())
5、元表
Lua 中的元表(Metatable)是一种特殊的表,它可以定义表的行为。通过设置元表,可以实现对表的访问、修改、算术运算等操作的重载。
-- 定义一个表
local mytable = {}
-- 定义元表
local metatable = {
__index = function (table, key)
print("访问不存在的键:" .. key)
end,
__newindex = function (table, key, value)
print("修改键:" .. key .. " 的值为:" .. value)
rawset(table, key, value)
end,
__add = function (table1, table2)
local result = {}
for k, v in pairs(table1) do
result[k] = v
end
for k, v in pairs(table2) do
result[k] = v
end
return result
end,
}
-- 设置元表
setmetatable(mytable, metatable)
-- 访问不存在的键
print(mytable.foo)
-- 修改键的值
mytable.bar = "Hello World"
-- 算术运算
local table1 = {1, 2, 3}
local table2 = {4, 5, 6}
local result = table1 + table2
for k, v in pairs(result) do
print(k, v)
end
6、数组
在 Lua 中,数组可以使用表来模拟。可以使用 table.insert
函数向数组中添加元素,使用 table.remove
函数删除数组中的元素。
-- 创建数组
local my_array = {"apple", "orange", "banana"}
-- 访问数组中的元素
print(my_array[1])
print(my_array[2])
print(my_array[3])
-- 修改数组中的元素
my_array[2] = "pear"
-- 添加元素到数组末尾
table.insert(my_array, "grape")
{"detail":"Something went wrong, please try reloading the conversation."} ```lua