lua基本语法

ads

Lua是一种轻量级的、高效的脚本语言,广泛用于游戏开发、Web应用、嵌入式系统等领域。学习使用Luatos建议移步下面的两个视频链接,本文只做部分笔记提炼。

Lua快速入门教程(B站视频):https://www.bilibili.com/video/BV1vf4y1L7Rb/?vd_source=c69b3bb76765572918a1e065d9bae0f3Lua教程-进阶部分(B站视频):https://www.bilibili.com/video/BV1WR4y1E7ud/?vd_source=c69b3bb76765572918a1e065d9bae0f3Luatos的wiki文档lua教程:https://wiki.luatos.com/luaGuide/introduction.html
 print 输出显示变量或字符串值;
 --这里是被注释掉的内容  两个短横线单行注释;
 --[[这里是被注释掉的内容]]  多行注释;
 nil  表示没有任何有效值或未声明的值;
 =  赋值,将右边的赋给左边。当左右值的数量不一致时,Lua会进行下面的设定:
  • 变量个数 > 值的个数:按变量个数补足nil
  • 变量个数 < 值的个数:多余的值会被忽略
比如:
--demo.luaa, b, c = 0, 1print(a,b,c)--输出0   1   nil
a, b = a+1, b+1, b+2print(a,b)--输出1 2
a, b, c = 0print(a,b,c)--输出0 nil nil

算数运算符

+ 加

- 减法

* 乘法

/ 除法

% 取余,求出除法的余数

^ 乘幂,计算次方

- 负号,取负值

字符串

1、双引号间的一串字符

2、单引号间的一串字符
3、[[ 和 ]]间的一串字符,可以是多行
如:
str1 = "Lua1"str2 = 'Lua2'str3 = [[Lua3]]str4 = [[使用双括号时,甚至能包含换行数据换行了最后一行]]--输出所有字符串print(str1)print(str2)print(str3)print(str4)--[[输出结果:    Lua1    Lua2    Lua3    使用双括号时,甚至能包含换行数据    换行了    最后一行]]
 ..  两个小点,字符串拼接
比如:
print('abc'..'def')str1 = '123'str2 = '999'print(str1..str2)--[[输出结果    abcdef    123999]]

tostring(value) number转string,可以把number类型的变量和string类型的变量拼接起来,组成一个新的string,比如:

n = 123s = 'm/s'result = tostring(n)..sprint(result)--[[输出结果:    123m/s]]

tonumber(value) string转number,可以string类型的变量s转换成number类型的值,这样就可以计算了。比如:

n = 123s = '2333'result = tonumber(s) + nprint(result)--[[输出结果:    2456]]

反斜杠开头的都是转义字符,下面是常用的转义字符格式:

转义字符含义
n换行(LF),将当前位置移到下一行开头
r回车(CR),将当前位置移到本行开头
t占位,相当于4个空格或tab键
\反斜杠字
'
"
双引号
空字符(NULL)
ddd1到3位八进制数所代表的任意字符
xhh1到2位十六进制所代表的任意字符
str = "'"\x61112"print(str)--输出为'"ap

逻辑运算

  true  真

  false  假

Lua 把false 和 nil 看作是false,其他的都为true(包括0这个值,也是相当于true)。

关系运算符:
    ==  等于
    ~=  不等于
    >  大于
    <  小于
    >=  大于等于
    <=  小于等于
逻辑运算符:
    and  逻辑与操作符。
    or  逻辑或操作符。
    not  逻辑非操作符。

条件判断

if语句如下结构:

if 条件 then    符合条件的代码end
多条件判断:
if 条件1 then    满足条件1elseif 条件2 then    不满足条件1,但是满足条件2else    前面条件全都不满足end

循环

while的循环语法,整体的格式如下:

while 继续循环判断依据 do    执行的代码end
for的循环语法,整体的格式如下:
for 临时变量名=开始值,结束值,步长 do    循环的代码end
其中,步长可以省略,默认为1;临时变量名可以直接在代码区域使用(但不可更改),每次循环会自动加步长值,并且在到达结束值后停止循环。

中断循环:我们可以在一个循环体中使用break,来立即结束本次循环,比如像下面这样,计算1-100相加途中,小于100的最大的和:

result = 0for i=1,100 do    result = result + i    if result > 100 then        result = result - i        break    endendprint(result)-- 运行结果:91

table

在Lua中,table是一个一系列元素的集合,使用大括号进行表示,其中的元素之间以逗号分隔,类似下面的代码:

t = {1,3,8,5,4}
我们可以直接使用元素的下标,来访问、或者对该元素进行赋值操作。
在上面的table变量t中,第一个元素的下标是1,第二个是2,以此类推(注意,一般语言中的数组基本都为不可变长度,这里的table为可变长度)。
我们可以用变量名+中括号,中括号里加上下标,来访问或更改这个元素,如下面的例子:
t = {1,3,8,5,4} --初始化表t的内容print(t[1]) --打印1print(t[3]) --打印8t[2] = 99 --更改第二个元素的值print(t[2]) --打印99t[6] = 2 --凭空新建第六个元素并赋值print(t[6]) --打印2print(t[10]) --因为不存在,打印nil
上面的描述中,我们将table来表示数组,实际上,table中可以包括任意类型的数据。比如我们可以在table中放置number和string数据,类似下面的代码:
t = {"abc",223,",..a",123123}
我们甚至能在里面放function变量,比如:
t = {    function() return 123 end,    function() print("abc") end,    function(a,b) return a+b end,    function() print("hello world") end,}t[1]()  -- 使用下标1的函数t[2]()  -- 使用下标2的函数t[3](1,2)  -- 使用下标3的函数并传递参数t[4]()  -- 使用下标4的函数
通过上述,我们的table都只是一些简单的List(列表),每个元素的下标都是自动从1排列的。实际上,Lua中,下标可以直接在声明时进行指定,像下面这样:
t = {6,7,8,9}--上面和下面的代码等价t = {    [1] = 6,    [2] = 7,    [3] = 8,    [4] = 9,}--甚至你可以跳过某些下标t = {    [1] = 6,    [3] = 7,    [5] = 8,    [7] = 9,}print(t[7])  --输出9--在声明后赋予元素值也是可以的t = {}  --空的tablet[101] = 10print(t[101])  --输出10
其实在Lua中,下标也可以是字符串,如下面的例子:
t = {    ["apple"] = 10,    banana = 12,    pear = 6,}--使用["下标"] = 值--和  下标 = 值--都是正确写法--当第二种方式有歧义时,应该用第一种方式--可以用下面两种方式访问:print(t["apple"])--输出10print(t.apple)--输出10--当第二种方式有歧义时,应该用第一种方式
string作为下标时,也可以动态赋值:
t = {} -- 空tablet["new"] = "新的值"print(t.new)--输出 新的值
在Lua中,所有的全局变量全部被存放在了一个大table中,这个table名为:_G 。我们可以用下面的例子来示范:
n = 123--新建变量print(n)--输出123print(_G.n)--输出123_G.abc = 1--相当于新建全局变量print(abc)--输出1_G["def"] = 23--相当于新建全局变量print(def)--输出23--甚至你可以像下面这样_G.print("hello")_G["print"]("world")
table连接字符串:table.concat
 table.concat (table [, sep [, i [, j ] ] ]) 
将元素是string或者number类型的table,每个元素连接起来变成字符串并返回。可选参数sep,表示连接间隔符,默认为空。i和j表示元素起始和结束的下标。例:
local a = {1, 3, 5, "hello" }print(table.concat(a))print(table.concat(a, "|"))-->打印的结果:--135hello--1|3|5|hello
table增删
插入: table.insert (table, [pos ,] value) 
在(数组型)表 table 的 pos 索引位置插入 value,其它元素向后移动到空的地方。pos 的默认值是表的长度加一,即默认是插在表的最后。
删除: table.remove (table [, pos]) 
在表 table 中删除索引为 pos(pos 只能是 number 型)的元素,并返回这个被删除的元素,它后面所有元素的索引值都会减一。pos 的默认值是表的长度,即默认是删除表的最后一个元素。
local a = {1, 8}        --a[1] = 1,a[2] = 8table.insert(a, 1, 3)   --在表索引为1处插入3print(a[1], a[2], a[3])table.insert(a, 10)    --在表的最后插入10print(a[1], a[2], a[3], a[4])-->打印的结果:--3    1    8--3    1    8    10

local a = { 1, 2, 3, 4}print(table.remove(a, 1)) --删除速索引为1的元素print(a[1], a[2], a[3], a[4])print(table.remove(a)) --删除最后一个元素print(a[1], a[2], a[3], a[4])-->打印的结果:--1--2 3 4 nil--4--2 3 nil nil

函数

函数形式:

function 函数名(参数1,参数2,...)    代码内容end
例如:
function hello()    print('Hello world!')endhello()-- 输出:Hello world!
在Lua中,函数也是一种变量类型,因此也可以把函数赋值给其它变量,比如:
function hello()    print('Hello world!')enda=hellohello()a()--[[输出:    Hello world!    Hello world!]]--或者更改为如下:hello = function()    print('Hello world!')endhello()-- 输出:Hello world!
我们可以使用 local 标志来新建临时变量,使用 local 创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。
函数中 return 表示返回一个值,并且立刻结束这个函数的运行。如:
function add(a,b)    return a+b,"ok"endall, result = add(1,2)--这里all的值就是3了--这里result的值就是string "ok"print(all,result)--输出:3    ok
·EN

  欢迎关注下面的 本文公众号  

👇

承蒙时间,感谢阅读,我们下次见❤

您的每一个点赞+在看,我都当成了喜欢

最后编辑于:2024/1/17 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com