4829

24 分钟

#Lua 的变量和基本类型

Lua 中定义变量的语法如下:

local 变量名 = 初始值

其中 local 表示定义局部变量,若删去 local 则表示定义全局变量。

例如:

local x = 10 -- 定义局部变量 x,初始值为 10
  • 定义局部变量 x,初始值是 10

示例代码中的两个短横线(--)表示单行注释,用于对代码进行解释说明,运行时会被解释器忽略。

#类型

Lua 有 8 种基本数据类型,分别是: nilbooleannumberstringtablefunctionthreaduserdata

数据类型说明
nil只有 nil 值的类型是 nilnil 值表示数据的无效值
boolean布尔类型,包含真(true)和假(false)两个值
number数值类型,例如 20253.1415926
string字符串类型,通过一对双引号("")或单引号('')包裹,例如 "hello"
table表类型,是 Lua 中唯一的数据结构机制,键和值可以是 nil 以外的任何类型
function函数类型
thread协程类型
userdata用户数据类型,主要是通过 C API 创建的数据

使用 type 函数可以判断值的类型,返回值是一个字符串:

print(type(nil) == 'nil') print(type(false) == 'boolean') print(type(1) == 'number') print(type('hello') == 'string')

运行结果:

true true true true

#nil 类型

nil 类型仅有 nil 一个值,是用于表示无效的空值。

如果读取一个没有被初始赋值的变量,就会得到 nil

print(a) -- 得到值 nil print(type(a)) -- type(a) 返回字符串的 "nil"

运行结果:

nil nil

#boolean 类型

boolean 类型用于表示逻辑值:真(true)或假(false)。

逻辑运算的真值表:

XY与运算 X and Y或运算 X or Y非运算 not X
truetruetruetruefalse
truefalsefalsetruefalse
falsetruefalsetruetrue
falsefalsefalsefalsetrue
  • 与运算符 and:X 和 Y 都是 true 时结果为 true;任意一个为 false 时结果为 false
  • 或运算符 or:X 或 Y 任意一个是 true 时结果为 true;都是 false 时结果为 false
  • 非运算符 notnot true 结果为 falsenot false 结果为 true

boolean 类型以外的值在逻辑运算中,nil 被视作假,其它值均被视为真。

示例:

print(true and true) print(true and false) print(true or false) print(not true)

运行结果:

true false true false

#number 类型

number 类型表示数值;在 Lua 中不区分整数和小数类型,默认使用双精度浮点数表示。

Lua 支持以下数学运算符:

  • +: 加法
  • -: 减法
  • *: 乘法
  • /: 浮点除法
  • //: 向下取整除法
  • %: 取模(除法取余数)
  • ^: 乘方
  • -: 负号

示例:

print(1+1) print(3*7) print(9/2) print(9//2) -- 9 除以 2,向下取整 print(9%2) -- 9 除以 2 的余数 print(2^10) -- 2 的 10 次方

运行结果:

2 21 4.5 4 1 1024.0

Lua 支持以下位运算:

  • &: 按位与
  • |: 按位或
  • ~: 按位异或
  • >>: 右移
  • <<: 左移
  • ~: 按位非

所有的位操作都将操作数先转换为整数,然后按照二进制位进行操作,其结果是一个整数。

对于右移和左移,均用零来填补空位。移动的位数若为负,则向反方向位移;若移动的位数的绝对值大于等于整数本身的位数,其结果为零 (所有位都被移出)。

示例:

print(0xf8 & 0x1f) -- 按位与 print(0xf8 | 0x1f) -- 按位或 print(0xf8 ~ 0x1f) -- 按位异或 print(1 << 10) -- 左移 10 位 print(~0xf0) -- 按位非

运行结果:

24 255 231 1024 -241

#string 类型

string 类型表示文本内容,值使用成对的双引号("")或单引号('')包裹。

示例:

local name = "Tom" local sex = "male"

对于一些无法直接表示的字符(例如换行)可以使用转义字符表示,以下是转义字符表:

转义字符说明
\\表示反斜杠(\)本身
\'表示单引号('
\"表示双引号("
\a(用于让蜂鸣器发出响声,通常不可用)
\b退格(Backspace)
\n换行符
\v纵向制表符
\t横向制表符(Tab)
\r回车(Return)
\f换页符号

Lua 支持多行字符,以两对方括号([[]])包裹。

例如:

-- 多行字符串 local sql_query = [[ SELECT name, age, email FROM users WHERE age > 18 AND status = 'active' ORDER BY name ]] print(sql_query)

运行结果:

SELECT name, age, email FROM users WHERE age > 18 AND status = 'active' ORDER BY name
  • 多行字符串中会保留所有空格、缩进以及换行

Lua 可以使用 .. 运算符进行字符串拼接操作:

print("hello" .. "world")

运行结果:

helloworld

创建于 2025/9/4

更新于 2025/9/28