-- 声明变量local x = 10local y = 20-- 条件语句if x > y then print("x is greater than y")elseif x < y then print("x is less than y")else print("x is equal to y")end-- 循环语句for i = 1, 5 do print(i)end-- 函数定义function add(a, b) return a + bendprint(add(x, y))3.1.1 变量和数据类型

在Lua中,变量不须要预先声明,只须要为变量赋值即可。
Lua是动态类型措辞,变量不须要类型定义,只须要为变量赋值即可。
Lua中的变量类型包括:

nil:表示一个无效值,在条件表达式中相称于false。
boolean:包含两个值:false和true。
number:表示双精度类型的实浮点数。
string:字符串由一对双引号或单引号来表示。
table:Lua中的表(table)实在是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。
function:由C或Lua编写的函数。
userdata:表示任意存储在变量中的C数据构造。
thread:表示实行的独立线路,用于实行协同程序。
3.1.2 运算符及其用法

Lua中的运算符包括:

算术运算符:+,-,,/,%,^(求幂)。
关系运算符:==,~=(不即是),<,>,<=,>=。
逻辑运算符:and,or,not。
其他运算符:…(用于函数参数可变数量的表示),#(用于获取字符串或表数据的长度)。
3.1.3 条件掌握语句

Lua中的条件掌握语句包括:

if语句:用于表示条件判断。
if条件为true时,实行if语句中的代码块。
if条件为false时,如果有else部分,实行else部分代码块,否则跳过if语句后面的代码块。

示例:

90分掌握一门措辞lua脚本根本到高级教程

a=10if(a<20)then print("a 小于 20")else print("a 大于 20")endif…elseif…else语句:用于在if条件为false时实行elseif…else语句代码块,用于检测多个条件语句。

示例:

a=100if(a<20)then print("a 小于 20")elseif(a>20)then print("a 大于 20")else print("a 即是 20")end3.1.4 循环掌握语句

Lua中的循环掌握语句包括:

while循环:在判断条件为true时会重复实行循环体语句。

示例:

a=10while(a<20)do print("a 的值为:",a) a=a+1endfor循环:可以重复实行指定语句,重复次数可在for语句中掌握。
数值for循环通过exp1、exp2、exp3掌握循环次数,泛型for循环通过ipairs或pairs遍历表。

示例:

for i=1,10 do print(i)end3.1.5 函数定义与调用

在Lua中,函数可以用作数据赋值,也可以作为参数通报。
函数可以返回多个值。

示例:

function add(x,y) return x+yendprint(add(1,2)) -- 输出:3

在 Lua 中,函数的定义和调用是非常灵巧和强大的。
除了基本的函数定义和调用,Lua 还支持一些分外的函数语法,如匿名函数、可变参数函数等。

3.1.6 基本函数定义与调用

基本函数定义利用 function 关键字,后面随着函数名和参数列表,然后是函数体。

function myFunction(arg1, arg2) -- 函数体 return arg1 + arg2endlocal result = myFunction(3, 4) -- 调用函数,将返回值赋值给变量 result3.1.7 匿名函数(Lambda 函数)

匿名函数没有名字,可以直接赋值给变量。
匿名函数常日用于高阶函数和回调函数中。

local function1 = function(x, y) return x + yend-- 或者利用匿名函数简写形式local function2 = function(a, b) return a + b endlocal anonymousFunction = function(x, y) return x y endlocal result = anonymousFunction(5, 6) -- 调用匿名函数3.1.8 闭包(Closure)

闭包是指函数及其干系引用环境的组合。
闭包可以在函数之外访问和修正函数的局部变量。

function makeMultiplier(n) return function(m) return n m endendlocal double = makeMultiplier(2) -- 创建一个新的函数,用于将输入乘以2local product = double(3) -- 调用新函数,将3乘以23.1.9 可变参数函数

Lua 中的函数可以接管可变数量的参数。
可以通过 ... 来获取所有额外的参数,它们会作为一个表返回。

function sum(numbers, ...) local sum = 0 for i, v in ipairs(numbers) do sum = sum + v end for i, v in ipairs({...}) do sum = sum + v end return sumendlocal result = sum(1, 2, 3, 4, 5) -- 调用函数,打算 1 到 5 的和3.1.10 局部函数和嵌套函数

在函数内部定义的函数称为局部函数。
局部函数可以访问外部函数的变量,但不能访问外部函数的外部变量。

function outerFunction() local x = 10 function innerFunction() print(x) end innerFunction() -- 调用内部函数,输出 10endouterFunction()3.1.11 递归函数

递归函数是调用自身的函数。
递归函数常用于办理须要重复实行的问题,如阶乘、斐波那契数列等。

function factorial(n) if n == 0 then return 1 else return n factorial(n - 1) endendlocal result = factorial(5) -- 调用函数,打算 5 的阶乘3.1.13 Lua函数返回值的基本语法

在Lua中,函数返回值的基本语法是在函数体中利用return关键字来指定返回值。
返回值可以是单个值,也可以是多个值。

Lua函数返回单个值的语法和示例

如果函数只须要返回一个值,可以直接在return语句后指定该值。
例如:

function add(a, b) return a + bendresult = add(3, 4) -- result = 7

Lua函数返回多个值的语法

如果函数须要返回多个值,可以在return语句后列出所有要返回的值,用逗号分隔。
例如:

function maximum(a) local mi = 1 local m = a[mi] for i, v in ipairs(a) do if v > m then mi = i m = v end end return m, miendmax_value, max_index = maximum({8, 10, 23, 12, 5}) -- max_value = 23, max_index = 3

Lua函数无返回值时的情形

如果函数没有return语句,或者return语句后面没有值,那么函数将默认返回nil。
例如:

function no_return() -- 没有return语句endresult = no_return() -- result = nil

关于Lua函数返回值语法的把稳事变和常见问题

Lua函数可以返回任意数量的值,但调用函数时,必须确保吸收的变量数量与函数返回值的数量匹配。
如果函数返回值的数量多于吸收的变量数量,超出部分将被丢弃。
如果函数返回值的数量少于吸收的变量数量,多余的变量将自动被赋值为nil。
当函数被当作一个语句调用时(如add(3, 4)),所有返回值都将被丢弃。
在Lua中,函数调用总是带括号,除非单个参数的函数且参数是字符串或表布局器。
调用函数时,如果函数只返回一个值,并且该值被用作表达式的一部分(如print(add(3, 4))),那么函数返回的第二个及之后的值将不会被赋值或输出。

以上内容全面涵盖了Lua函数返回值的基本语法、单个返回值的语法、多个返回值的语法,以及无返回值的情形,以及把稳事变和常见问题。

3.1.14 Lua中其他语法的利用

Lua中ipairs函数的利用方法和示例

ipairs是一个迭代器函数,它返回一个用于遍历table(表)的迭代器。
它只适用于key为整数的table,并且从1开始递增。
当遍历到第一个非整数的key或者遍历到nil值时,迭代结束。

local t = {1, 2, 3, "a", 4, nil}for i, v in ipairs(t) do print(i, v)end

Lua中pairs函数的利用方法和示例

pairs函数也是一个迭代器函数,用于遍历table中的所有key-value对。
无论key是整数还是字符串,都可以遍历到。
当遍历到nil值时,迭代结束。

local t = {1, 2, 3, "a", 4, nil}for k, v in pairs(t) do print(k, v)end

Lua中可变参数列表的语法和用法

在Lua中,可以利用...表示不天命量的参数,这便是可变参数列表。
它常用于函数调用,也可以用于函数定义中。

function sum(...) local s = 0 for i, v in ipairs{...} do s = s + v end return sendprint(sum(1, 2, 3, 4, 5)) -- 输出 15

Lua中的not逻辑操作符的浸染和用法

not是一个逻辑操作符,用于对布尔值进行取反操作。
如果布尔值为true,则not操作符返回false;如果布尔值为false,则not操作符返回true。

print(not true) -- 输出 falseprint(not false) -- 输出 true

Lua中的#长度操作符的功能和利用场景

#是Lua中的长度操作符,用于获取table的长度。
如果table是一个数组,那么它的长度便是数组中元素的个数;如果table是一个map,那么它的长度便是map中key的数量。

local t = {"a", "b", "c"}print(#t) -- 输出 3local m = {x = 1, y = 2, z = 3}print(#m) -- 输出 3

Lua中的三目表达式的语法构造和用法

三目表达式是Lua中的条件表达式,它的语法构造是条件 ? 值1 : 值2。
如果条件为真,则返回值1;如果条件为假,则返回值2。

local a = 10local b = 20local max = (a > b) and a or bprint(max) -- 输出 203.2 常用数据构造

Lua支持多种常用数据构造,包括数字、字符串、表(类似于数组和字典的结合体)、函数等。
表是Lua中最主要的数据构造之一,它可以存储任意类型和数量的数据,并支持繁芜的操作:

表(Tables):表是Lua中最基本的数据构造,类似于数组和字典的结合体。
在表中,每个元素都由一个键值对(key-value pair)表示,键可以是数字或字符串,值可以是任何类型的数据,包括其他表。
表在Lua中非常灵巧,可以用来表示数组、字典、凑集等多种数据构造。

用法:

-- 创建一个空表local table1 = {}-- 创建一个包含键值对的表local table2 = { key1 = "value1", key2 = 123, key3 = true}-- 访问表中的元素print(table2.key1) -- 输出 "value1"-- 修正表中的元素table2.key1 = "new value"print(table2.key1) -- 输出 "new value"-- 添加新的键值对table2["key4"] = "value4"print(table2.key4) -- 输出 "value4"-- 遍历表中的元素for key, value in pairs(table2) do print(key, value)end字符串(Strings):字符串是Lua中的另一种基本数据类型,用于表示文本信息。
Lua支持多种字符串操作函数,如连接、截取、更换等,使得字符串处理变得大略方便。

用法:

-- 创建一个字符串local str = "Hello, World!"-- 访问字符串中的字符print(string.sub(str, 1, 5)) -- 输出 "Hello"-- 连接字符串local str1 = "Hello, "local str2 = "World!"local str3 = str1 .. str2print(str3) -- 输出 "Hello, World!"-- 更换字符串中的子串local newStr = string.gsub(str, "World", "Lua")print(newStr) -- 输出 "Hello, Lua!"数字(Numbers):Lua支持两种类型的数字:整数(Integer)和浮点数(Float)。
Lua的数字类型没有显式的声明,它们可以自动转换。

用法:

-- 创建一个整数local num1 = 123-- 创建一个浮点数local num2 = 3.14-- 进行数学运算local result = num1 + num2print(result) -- 输出 126.1