#Lua 的变量和基本类型
Lua 中定义变量的语法如下:
local 变量名 = 初始值
其中 local 表示定义局部变量,若删去 local 则表示定义全局变量。
例如:
local x = 10 -- 定义局部变量 x,初始值为 10
- 定义局部变量
x,初始值是 10
示例代码中的两个短横线(
--)表示单行注释,用于对代码进行解释说明,运行时会被解释器忽略。
#类型
Lua 有 8 种基本数据类型,分别是: nil,boolean,number,string,table,function,thread 和 userdata。
| 数据类型 | 说明 |
|---|---|
nil | 只有 nil 值的类型是 nil,nil 值表示数据的无效值 |
boolean | 布尔类型,包含真(true)和假(false)两个值 |
number | 数值类型,例如 2025,3.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 - 非运算符
not:not true结果为false;not 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