lua起步笔记

本文介绍了Lua语言的基础知识,包括语法特点、数据类型、流程控制、函数定义与调用等内容,并详细解析了Lua中的Table概念及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 注释

单行注释
–注释内容

多行注释
–[[
注释内容
]]–

2 标识符

lua中的标识符由字母、数字、下划线组成;数字不作为开头;区分大小写。
通常,以下划线开头,后跟大写字母的名字被保留用于内部全局变量。

lua中保留的关键字有:

and  break  do  else
elseif  end  false  for
function  if  in  local
nil  not  or  repeat
return  then  true  until
while
3 lua中的值和类型

最常见的类型有:
数值类型、字符串类型、布尔类型(true, false)
这里写图片描述

此外还有Table类型;lua中的函数也可以赋值给一个变量,所以也有函数类型

4 lua中的Table

lua中的表相当于一个关联数组。可以理解为Table = 数组 + 映射,Table即有数组功能,也有映射功能。
1) 数组功能
常规的如C语言,数组里的元素都必须是同一类型的;但lua的数组中可以同时存在不同类型的值。
这里写图片描述

也可以直接在{}中写值:
这里写图片描述

lua数组的特点:
- 不需要预定义长度
- 数组的值没有类型限制
- 下标从1开始,不是0

2) 映射功能
Table可以实现键和值的映射关系;键可以是数值,也可以只字符串。
这里写图片描述

也可以写成:
这里写图片描述

注意,字符串键可以通过点号来引用,但数值的键不行。

5 lua中的函数

函数由function关键字开始定义,由end结束,return关键字来返回结果值(函数有可以没有返回值)。
注:lua程序没有主函数。一个lua文件可以被当做一整个函数,在一个lua文件最后通过一个return,即可表示该文件的运行返回值。

例:

function add(a, b)
    return a + b
end

print(add(1, 2))

上面的add函数还有如下等价的写法:

add = function (a, b)
    return a + b
end

foo = add

print(add(1, 2))
print(foo(1,2))

这种写法可以理解为,将这个函数赋值给了add,add还可以继续赋值给foo。
在函数调用的时候,通过被赋值的变量来传参即可。

函数还可以赋值给Table中的一个元素,如:

class = {}
class.foo = function (a, b)
    return a + b
end

也或写为:

class = {}
function class.foo(a, b)
    return a + b
end

lua函数多返回值的特性
常规如C语言要一个函数返回多个值是不可能的,但lua函数可以。

function foo(a, b)
    return a + b, a - b
end

x, y = foo(1, 2) 
print(x, y)

注意:
lua支持多变量的赋值;
对于两个变量的值交换,可写为:x, y = y, x

6 lua中的表达式

1) 数值运算
+, -, *, / 没有++和–运算符

有趣的是,当数值和字符串做运算时,会自动转化为数值
这里写图片描述
这里写图片描述

2) 逻辑运算
and or not

3) 字符串拼接
.. 运算符为两个点
这里写图片描述

如果用+号会报错,因为+在lua中只用作数值运算
这里写图片描述

7 lua中的变量

lua中的变量默认就是全局变量。即默认情况下,一个函数内的变量,其作用域是全局的,在函数外也能直接调用。
为了声明是局部变量的话,需要在变量前用local关键字修饰。
带local关键字修饰的变量,只有局部作用范围,但运算效率会高很多。建议尽可能的使用local。

8 lua中的流程控制

1) if
if 条件 then
执行语句
elseif 条件 then
执行语句
else
执行语句
end

例:

local a = 61

if a < 60 then
    print("F")
elseif a > 80 then
    print("A")
else 
    print("B")
end

if 0 then
    print("true")
end

注意:
false和nil为假;true和非nil为真;0为真

2) while

local i = 0
while i < 10 do
    print(i)
    i = i + 1
end

3) for
a) for的基本循环

for i = 1, 10, 1 do
    print(i)
end

循环过程中,i会包括1和10两个终端的值,表示按照步长1打印从1开始到10的数字。
lua中默认步长为1,所以也可以省略不写步长1:

for i = 1, 10 do
    print(i)
end

如果希望从10到1的话,将步长值改为-1即可:

for i = 1, 10, -1 do
    print(i)
end

b) for的泛型遍历
测试代码:
这里写图片描述
运行结果如下:
这里写图片描述

pairs和ipairs是两个函数,也叫迭代器
他们的区别是:
pairs会便利Table中的所有元素;pairs是以散列的方式进行遍历,输出的结果是没有顺序的
ipairs只便利Table中的下标从1开始的连续数组元素

4) repeat … until
例如:

local a = 5

repeat
    print(a)
    a = a - 1
until a==0
9 lua中的包

通过require函数来引用已有的lua文件。
假设有foo.lua文件内容如下:

class = {}
function class.foo(a, b)
    return a + b
end

return class

这里就可以直接引用foo.lua的代码:

local a = require("foo")
print(a.foo(1,2))

require会去查找文件名为”foo”的文件(文件名不需要带后缀),然后加载文件并运行

与此类似功能的还有dofile函数,但dofile引用文件需要带文件名后缀.lua。
此外的一个重要区别是:
require不管被调用多少次,只对文件加载运行一次;
dofile被调用几次,就会加载运行几次

测试代码:
这里写图片描述

运行结果:
这里写图片描述

10 lua中的系统库

lua中有很多常用系统函数,灵活使用可以帮助我们提高开发效率。
1) table
这里写图片描述

例1:table.insert()用来给数组插入数据

a = {}

for i = 1, 10 do
    table.insert(a, i)
end

for k,v in pairs(a) do
    print(k,v)
end

运行结果:
这里写图片描述

例2:table.remove()用来删除数组中指定下标的元素

a = {}

for i = 1, 10 do
    table.insert(a, i)
end

#删除下标为2的元素
table.remove(a, 2)

for k,v in pairs(a) do
    print(k,v)
end

运行结果:
这里写图片描述
左边键值里虽然还有2,但是右边其对应的值已经没有2了,变成了3。

例3:对于表中映射的删除,直接赋值nil即可。

b = {}
b.x=1
b.y=2
for k,v in pairs(b) do
    print(k,v)
end

print("删除隐射y")
b.y=nil
for k,v in pairs(b) do
    print(k,v)
end

运行结果:
这里写图片描述

例4:计算数组或字符串长度用#井号操作符
求表中元素的个数:
这里写图片描述

求字符串长度:
这里写图片描述

例5:类型转换
1) tonumber()
2) tostring()
这里写图片描述
用type()函数查看变量类型

例6:string.format字符串格式化
str1 = string.format(“my name is %s, I’m %d”, “Tom”, 25)
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值