本文共 3008 字,大约阅读时间需要 10 分钟。
Lua 中变量有三种类型:全局变量、局部变量和表中的域。
全局变量:默认情况下,Lua 中所有变量都是全局变量,无需声明即可使用。
b = 10print(b) -- b 是全局变量
如果需要删除全局变量,可以将其赋值为 nil
:
b = nilprint(b) -- b 已被删除
局部变量:使用 local
显式声明的变量或函数参数是局部变量。
local a = 10print(a) -- a 是局部变量
局部变量的作用域从声明位置开始到所在语句块结束。
表中的域:变量的默认值均为 nil
。如果未赋值,表中的域会被视为 nil
。
Lua 是动态类型语言,不需要预先定义类型,值可以存储在变量中。
数据类型:Lua 中有 8 个基本类型,包括 nil
、boolean、number、string、userdata、function、thread 和 table。
nil
:表示空值,在条件判断中相当于 false
。boolean
:布尔类型,true
和 false
。number
:数值类型,相当于 C 语言的 double
。string
:字符串类型,由双引号或单引号表示。function
:函数类型。table
:关联数组,支持键为数字、字符串或其他表类型。thread
:表示执行的独立线路,用于协同程序。userdata
:表示任意存储在变量中的 C 数据结构。类型判断:使用 type
函数获取变量类型。
print(type(1)) -- numberprint(type("hello")) -- string
条件判断:Lua 的 if
判断条件理解为是否有效,nil
和 false
为无效值,其余类型均为有效值。
if b == nil or not b then print("b 不存在或为假值")else print("b 存在且为真值")end
表是 Lua 中最重要的数据结构,功能强大,支持哈希表、数组、字典等。
表的创建与使用:
a = {} -- 创建空表a[10] = 1 -- 添加元素for i = 1, 15, 1 do print(a[i])end
输出结果为:
123...(直到 15)
表的索引:默认索引从 1 开始,键可以是数字、字符串或其他表类型。
tb = { '干饭', '吃饭', '恰饭'}-- 表中元素为 [1] = '干饭', [2] = '吃饭', [3] = '恰饭'
自定义键与顺序:
tb = { '干饭', '吃饭', '恰饭', s = '溜达', b = '哈哈哈', _ = '饿了么'}-- 表中元素为 [1] = '干饭', [2] = '吃饭', [3] = '恰饭', ['s'] = '溜达', ['b'] = '哈哈哈', ['_'] = '饿了么'
表的增删元素:
nil
,留下空位。tb = { '干饭', '吃饭', '恰饭' }tb[2] = nilprint(tb) -- [1] = '干饭', [2] = nil, [3] = '恰饭'
remove
方法,后续元素移位。tb = { '干饭', '吃饭', '恰饭' }table.remove(tb, 2)print(tb) -- [1] = '干饭', [2] = '恰饭'
表的大小与遍历:
tb = { '干饭', '吃饭', '恰饭' }print(#tb) -- 表的大小为 3for i in pairs(tb) do print(i, tb[i])end
输出结果为:
1 干饭2 吃饭3 恰饭
Lua 函数具有灵活的特性,支持多重返回值、不定长参数和方法的语法糖。
函数定义:
function func(...)endfunction func = function(...)end
a = function(x, y) return x * yendprint(a(2, 3)) -- 6
多重返回值:
function retMultiple(...) return ...endlocal a, b = retMultiple(1, 2)print(a, b) -- 1 2
不定长参数:
function func(...)endlocal args = {...}print(args[1], args[2])
方法的冒号与 self:
Account = { balance = 0, withdraw = function(self, v) self.balance = self.balance - v end}Account:withdraw(100)
函数嵌套与闭包:
local f = function(n) return function(x) return x + n endendprint(f(1)(2)) -- 3
function func(...) print(...)endfunc(123)
local tbTable = {}tbTable.func1 = function(...) print(...)endtbTable.func2 = function(...) print(...)endtbTable.func1(4, 5, 6)
local tbTable = { key1 = 1, func1 = function() print(self.key1) end}function tbTable:func1()
print("Hello") -- 可以省略括号func {1, 2, 3}
local
声明的变量在函数外相当于全局变量。local f = function(n) return function(x) return x + n endendprint(f(1)(2)) -- 3
local p = 1local f = function() local v = 0 return function() v = v + p print(v) endenda, b = f(), f()print(a(), b())print(p = 2, a(), b())
local tbTable = { func1 = function(...) print(...) end, func2 = function(...) print(...) end}print(tbTable.func1(4, 5, 6))
Lua 是一门灵活且强大的小型编程语言,适合用于脚本编写和扩展性需求。通过理解变量、数据类型、表和函数的特性,开发者可以充分发挥 Lua 的潜力。
转载地址:http://lsufk.baihongyu.com/