本文共 5743 字,大约阅读时间需要 19 分钟。
lua 是动态类型的语言
print(type("Hello")) --stringprint(type(666)) --numbera = printprint(type(a)) --functiona = 111print(type(a)) --numberprint(type(b)) --nilprint(type(string)) -- table 不太懂为什么print(type(type(X))) -- string
nil (空)
boolean (布尔)
number (数字)
科学计数法
a = 3.2e2print(a) --320
string (字符串)
修改子串
a = "one string"b = string.gsub(a, "one", "another") -- 字符串替换函数print(b) -- another stringprint(a) -- one string
字面字符串
a = 'Hello'b = "World"c = "I'm a student"d = "I\'m a student'"
转义序列
print("one line\nnext line\"in quotes\",'in quotes'")--[[one linenext line"in quotes",'in quotes'--]]
可以通过数值指定字符串中的字符
print('a' == '\97') -- true
page = [[Lua Study Lua 学习 ]]
lua 提供了运行时数字和字符串的自动转换
print("10" + 1) --字符串10会被自动转换为数字10,结果打印为11print("Hello" + 1) -- 会报错
字符串连接符 ..
print("A".."=".."B") -- A=Bprint(10..24) -- 会报错print(10 .. 24) -- 1024
长度操作符 #
print(#"Hello") -- 5
tonumber
line = io.read() -- 读取一行n = tonumber(line)if n = nil then error(line .. " is not a valid number")else print(n * 2) end
tostring
a = 2333print(tostring(2333) == "2333") -- trueprint(a .. "" == "2333") -- true
举例: io.read
io 模块中的 read 函数
使用字符串 read 作为 key 来索引 table io
在 lua 中 table 既不是值也不是变量,而是对象
可将 table 想象为一个动态分配的对象
程序仅持有对他们的一个引用(或指针)
lua 不会暗中产生 table 的副本,或者创建新的 table
在 lua 中不需要声明一个 table
a = {} -- 创建了一个 Table 把它的引用存储到 a 这个变量里,那么 a 就是一个 table 类型的变量了k = "x" a[k] = 10 -- 新条目, key = x, value = 10 在 a 这个 table 添加了一个元素,这个 table 的索引是字符串索引,这个新生成的条目的值就是 10,它的索引是 xa[20] = "great" -- 新条目, key = 20, value = "great"print(a["x"]) -- 10k = 20 print(a[k]) -- greata["x"] = a["x"] + 1print(a["x"]) -- 11
table 永远是匿名的
a = {}a["x"] = 10b = a -- b 与 a 引用了同样一个 table print(b["x"]) -- 10a = nilprint(a["x"]) --报错print(b["x"]) --10 因为现在只有 b 在引用 table ,而 a 已经清除了对 table 的引用b = nil -- 现在 a 和 b 都没有对 table 引用了
所有 table 都可以通过不同类型的索引来访问它的值
-- for 循环 ,索引从1开始,与C或其他语言从0开始不同, do 里面的代码块是循环体t = {}for i = 1, 1000 do t[i] = 2 * i -- 值是索引的两倍endprint(t[8]) -- 16t["x"] = 10 print(t["x"]) --10print(t["y"]) -- nilt["x"] = nil -- 删除了 table 中索引为 x 的元素
lua table 访问的两种写法(语法糖)
a.x -- 表示为 a["x"] 以字符串 x 为索引 tablea[x] -- 以变量 x 的 值 为索引 tablea = {}x = "y" -- x 已经被赋值为"y" 所以变量 x 的值为字符串 y ,索引 x 变量就是索引字符串 ya[x] = 10print(a.x) -- 索引为字符串 x --> nilprint(a["x"]) -- 索引为字符串 x --> nilprint(a[x]) -- 索引为变量 x --> 10print("\n")print(a.y) -- 索引为字符串 y --> 10print(a["y"]) -- 索引为字符串 y --> 10print(a[y]) -- 索引为变量 y --> nil
表示传统的数组或线性表
长度操作符 # 对于 table 的作用
t = {}for i = 1, i = 666 do t[i] = i * 2endprint(#t) -- 666, 相当于这个 table 有 666 个元素(或者称这个 table 的大小为 666)for i = 1, #t do print(t[i])endprint(t[#t]) -- 打印 table 最后一个值t[#t] = nil -- 删除 table 的最后一个值print(#t) -- 现在 table 的长度就是 665 个t[#t + 1] = 8888 -- 给 table 再加一个元素print(#t) -- 现在 table 的长度是 666 个print(t[#t]) -- 现在 table 的最后一个元素就是 8888 了
数组的实际大小
a = {}a[10000] = 1print(#a) -- 0print(a[10000]) -- 1print(table.maxn(a)) --> 10000
对于索引类型不明确时进行显式转换
i = 10j = "10"k = "+10"t = {}t[i] = "one value"t[j] = "another value"t[k] = "yet another value"print(t[i]) -- one valueprint(t[j]) -- another valueprint(tonumber(t[k])) -- one valueprint(tonumber[t[j]]) -- one valueprint(t[tonumber(k)])print(t[tonumber(j)])
转载地址:http://mfuki.baihongyu.com/