Lua基础语法

发布于:2025-05-25 ⋅ 阅读:(14) ⋅ 点赞:(0)


一、注释

Lua 的行注释为两个连续的减号,段注释以- -[[开头,以- -]]结尾。
不过,在调试过程中如果想临时取消段注释,而直接将其标识删除,这样做其实并不好。因为有可能还需要再添加上。而段注释的写法相对较麻烦。所以,Lua 给出了一种简单处理方式:在开头的–[[前再加一个减号,即可使段注释不起作用。其实就是使两个段注释标识变为了两个行注释。

--[[
这个是段注释
--]]

--这个是行注释

在这里插入图片描述
想要取消段注释--[[前面多加一个-就好了。
可见被红波浪线警告了,即注释失效了
在这里插入图片描述

二、 数据类型

Lua 中有 8 种类型,分别为:nil、boolean、number、string、userdata、function、thread 和 table。通过 type()函数可以查看一个数据的类型,例如,type(nil)的结果为 nil,type(123)的结果为 number。

在这里插入图片描述

print(type(123))
print(type("hello"))
print(type(1.12))
print(type(nil))

在这里插入图片描述

1. 注意事项

值得注意的是lua是弱类型的,也就是说一个变量的类型是可以改变的,比如这个变量n,一开始是int类型的,后来又变成了string类型的,而且lua中变量不需要声明类型,直接赋值就好了。

string类型复制的时候单引号和双引号都是可以的

n=10
print(type(n))
n="hello world"
print(type(n))
n='hello'
print(type(n))

在这里插入图片描述

2. 全局/局部变量

在lua中不管是在全局还是函数内不加local声明的变量全是全局变量,只有在函数内用local声明的变量才是局部变量,局部变量只能在本函数内使用。

Str1="全局"

function F()
    local str="local修饰的局部变量"
    Str2="函数内部的全局变量"
    print(Str1)
end
F()
print(Str2)

可以看出Str1和Str2都是全局变量,在任何位置都可以被访问
在这里插入图片描述
当我们在外面访问局部变量的时候就会报错,如图:
在这里插入图片描述

三、 标识符

程序设计语言中的标识符主要包含保留字、变量、常量、方法名、函数名、类名等。Lua的标识符由字母、数字与下划线组成,但不能以数字开头。Lua 是大小写敏感的。

1. 保留字

Lua 常见的保留字共有 22 个。不过,除了这 22 个外,Lua 中还定义了很多的内置全局变量,这些内置全局变量的一个共同特征是,以下划线开头后跟全大写字母。所以我们在定义自己的标识符时不能与这些保留字、内置全局变量重复。

这些关键字基本和C/C++里的没啥区别,不多介绍,以后用到的话再详细说明。
在这里插入图片描述

2. 变量

Lua 是弱类型语言,变量无需类型声明即可直接使用。变量分为全局变量与局部变量。Lua 中的变量默认都是全局变量,即使声明在语句块或函数里。全局变量一旦声明,在当前文件中的任何地方都可访问。局部变量 local 相当于 Java 中的 private 变量,只能在声明的语句块中使用。

3. 动态类型

Lua 是动态类型语言,变量的类型可以随时改变,无需声明。

四、 运算符

1. 算术运算符

以a为10,b为20为例

local a=10
local b=20
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a%b)
print(a^2)
print(-a)
print(5//2)--类似python里的地板除

在这里插入图片描述

  • SciTE 对 Lua 支持的目前最高版本为 5.1,而整除运算符//需要在 Lua5.3 版本以上,所以当前 SciTE 中无法看到效果。
  • 在命令行模式中,直接输入变量名回车,即相当于 print()函数输出该变量。

2. 关系运算符

下表列出了 Lua 语言中的常用关系运算符,设定 A 的值为 10,B 的值为 20:
和C/C++几乎一样,除了不等于,C/C++里是!=,lua里是~=。其余的一摸一样,就不演示了。
在这里插入图片描述

3. 逻辑运算符

注意,Lua 系统将 false 与 nil 作为假,将 true 与非 nil 作为真,即使是 0 也是真。下表列出了 Lua 语言中的常用逻辑运算符,设定 A 的值为 true,B 的值为 false:
在这里插入图片描述

A=true
B=false
print(A and B)
print(A or B)
print(not A)

在这里插入图片描述

4. 其他运算符

下表列出了 Lua 语言中的连接运算符与计算表或字符串长度的运算符
在这里插入图片描述

A="hello"
B=" world"
print(A..B)
print(#A)

在这里插入图片描述

五、 函数

Lua 中函数的定义是以 function 开头,后跟函数名与参数列表,以 end 结尾。其可以没有返回值,也可以一次返回多个值。

1. 固定参函数

Lua 中的函数在调用时与 Java 语言中方法的调用是不同的,其不要求实参的个数必须与函数中形参的个数相同。如果实参个数少于形参个数,则系统自动使用 nil 填充;如果实参个数多于形参个数,多出的将被系统自动忽略。

function F(a,b)
    print(a,b)
end
print("无实参传递")
F()
print("传递一个实参")
F(1)
print("传递两个实参")
F(1,2)
print("传递三个实参")
F(1,2,3)
print("传递四个实参")
F(1,2,3,4)

如图所示,实参和形参个数可以不一样,实参少,则形参自动用nil替代,实参多则直接忽略。
在这里插入图片描述

2. 可变参函数

在函数定义时不给出具体形参的个数,而是使用三个连续的点号。在函数调用时就可以向该函数传递任意个数的参数,函数可以全部接收。

function F(...)
	local a,b,c,d=...
	print(a, b, c, d)
	print(...)
end

print("传递三个实参")
F(10, 20, 30)

print("传递四个实参")
F(10, 20, 30, 40)

print("传递五个实参")
F(10, 20, 30, 40, 50)

local a,b,c,d=…也是少了的用nil代替,多了的直接忽略
在这里插入图片描述

3. 可返回多个值

Lua 中的函数一次可以返回多个值,但需要有多个变量来同时接收。

-- 定义一个普通函数,返回两个值
function F(a, b)
	local sum = a + b
	local mul = a * b
	return sum, mul;
end

-- 一次性接收两个值
M, N = F(3, 5)
print(M, N)

X=F(2,6)
print(X)

M,N,X=F(3,3)
print(M,N,X)

在这里插入图片描述
在这里插入图片描述

4. 函数作为参数

Lua 的函数中,允许函数作为参数。而作为参数的函数,可以是已经定义好的普通函数,也可以是匿名函数。

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

function Mul(a,b)
    return a*b
end

function F(a,b,f)
    print(f(a,b))
end

F(2,4,Add)
F(2,4,Mul)
-- 匿名函数调用
F(2, 4, function (a, b)
			return a - b;
		end
);

类似于C语言里的传递函数指针,C++里的传递可调用对象。
在这里插入图片描述

六、循环控制语句

Lua 提供了四种循环控制语句:while…do 循环、repeat…until 循环、数值 for 循环,及泛型 for 循环。同时,Lua 还提供了 break 与 goto 两种循环流程控制语句。

1. while…do

只要 while 中的条件成立就一直循环。

a = 3
while a>0 do
 	print(a)
 	a = a - 1
end

说白了就是C语言里的while循环
在这里插入图片描述

2. repeat…until

until 中的条件成立了,循环就要停止。

a=3
repeat
	print(a)
	a = a - 1
until a <= 0

说白了就是C语言里的do while
在这里插入图片描述

3. 数值 for

这种 for 循环只参用于循环变量为数值型的情况。其语法格式为:

for var=exp1, exp2, exp3 do
	 循环体
end
可以类比为C语言里的
for(int i=exp1;i<=exp2;i+=exp3){

}

var 为指定的循环变量,exp1 为循环起始值,exp2 为循环结束值,exp3 为循环步长。
步长可省略不写,默认为 1。每循环一次,系统内部都会做一次当前循环变量 var 的值与 exp2的比较,如果 var 小于等于 exp2 的值,则继续循环,否则结束循环。


for i=1, 9 do
	print(i)
	if i == 5 then
		break
	end
end

在这里插入图片描述

4. 泛型 for

泛型 for 用于遍历 table 中的所有值,其需要与 Lua 的迭代器联合使用。后面 table 再详解。

七、 流程控制语句

1. if 语句

Lua 提供了 if…then 用于表示条件判断,其中 if 的判断条件可以是任意表达式。Lua 系统将 false 与 nil 作为假,将 true 与非 nil 作为真,即使是 0 也是真。需要注意,Lua 中的 if 语句的判断条件可以使用小括号括起来,也可以不使用。

A=10
if A==10 then
    print("A=10")
end

在这里插入图片描述

2. if 嵌套语句

Lua 中提供了专门的关键字 elseif 来做 if 嵌套语句。注意,不能使用 else 与 if 两个关键字的联用形式,即不能使用 else if 来嵌套 if 语句。就是elseif要合起来中间不能有空格

A=11
if A<10 then
    print("A<10")
elseif A>10 then
    print("A>10")
else
    print("A=10")
end

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到