国际访客建议访问 Primers 编程伙伴 国际版站点 > Lua 教程 > 变量和基本类型 以获得更好的体验。

# 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)。

逻辑运算的真值表:

X Y 与运算 X and Y 或运算 X or Y 非运算 not X
true true true true false
true false false true false
false true false true true
false false false false true
  • 与运算符 and:X 和 Y 都是 true 时结果为 true;任意一个为 false 时结果为 false

  • 或运算符 or:X 或 Y 任意一个是 true 时结果为 true;都是 false 时结果为 false

  • 非运算符 notnot true 结果为 falsenot false 结果为 true

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

Lua 没有逻辑异或运算符

示例:

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-11-27 09:38:12 创建于: 2025-11-27 09:38:12