Lua脚本语法

本文介绍了Lua的基本语法,包括注释、变量(弱类型,支持数字、字符串、布尔值、表等类型)、条件语句(if-else和switch-case)、循环语句(while、repeat-until、for)。还讲解了函数、表的操作以及模块的使用。此外,文章还提到了字符串操作、文件操作、正则表达式、协程和元表等进阶特性,展示了Lua在编程中的灵活性和实用性。
摘要由CSDN通过智能技术生成

Lua脚本语法

一、基本语法

1、注释

在 Lua 中,用双横线 -- 开头表示注释,它可以在代码中添加对代码的解释和说明。单行注释只能注释一行,而多行注释需要用到 --[[ ]]--

-- 这是一行注释

--[[
这是
多行注释
]]

2、变量

在 Lua 中,变量是弱类型的,不需要事先声明类型,直接赋值即可。Lua 支持数字、字符串、布尔值、表等数据类型。

-- 数字
local a = 10

-- 字符串
local b = "Hello World"

-- 布尔值
local c = true

-- 表
local d = { 1, 2, 3 }

3、条件语句

Lua 中的条件语句与其他编程语言类似,支持 if-elseswitch-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.readio.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   

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值