Lua官网文档入口
document --> manual
一、基本数据类型
lua 中有八种基本数据型,分别是:
nil,boolean,number,string,function,userdata,thread 和 table。注意:lua 语句结束的分号可加可不加。
Lua 库函数 type返回一个描述给定类型数据的字符串,用法 type(val)
1.1 nil 表示空
--nil类型 a = nil; print(type(a))
1.2 boolean
--boolean类型 print(type(true)) print(type(false))
1.3 number 只包括整型和浮点型
--number类型 print(type(100)) print(type(3.1415926))
1.4 string 单引号和双引号都表示string 注意:单个字符也是字符串
与C语言一样,可以用反斜杠 \ 对特殊字符进行转义 如:换行符:\n 制表符:\t
如果想原样输出字符串,使用[[]]:
--string类型 str1 = 'hello' str2 = "world" str3 = 'A' print(type(str1)) print(type(str2)) print(type(str3)) str4 = "a\nb\tcde" print(str4) str5 = [[a\nb\tcde]] print(str5)
其余基本数据类型,我们在后面的文章再详细展开,这里可以先看下相关类型的打印。
--[[ 3. userdata 自定义数据类型 4. thread 协程 5. table 表 在 lua 中只有false 和 nil 才表示假, 0 和 空串表示真! ]] --function 类型 print(type(type)) --table 类型 print(type({})) val1 = 0; if val1 then print("val1 = 0 is true"); else print("val1 = 0 is false"); end val2 = ""; if val2 then print("val2 is true"); else print("val2 is false"); end
运行结果:
1.5 function
function 在lua中是一个基本数据类型,是第一类值。格式如下:
function funcName(args...) ... end
function的参数和返回值很灵活。
代码示例:
function func1() print("func1 call") end func1() function func2(a, b, c) print(a, b, c) end func2("lwang", 25, "beijing") -- 可变参函数 function func3(...) end -- 将匿名函数赋值给变量 add = function(a, b) return a+b end print(add(10, 20)) --作为其他函数的参数 function func4(funcName, a, b) return funcName(a,b) end local res = func4(add, 11, 22) print(res)
运行结果:
1.6 table
function 在lua中是一个基本数据类型,是第一类值。格式如下:
# 第一种,类似于map tableName={ k=v, } # 第二种,类似于数组,下标从1开始 tableName = {v1, v2, v3, ....}
代码示例:
-- table 类型,类似于map,理论上处理nil都可以成为key stuInfo = { id = 1, name = "zhangsan", age = 18, sex = true }; -- 遍历table中的元素 for k, v in pairs(stuInfo) do print(k,v) end print("==============") -- 只打印value for _, v in pairs(stuInfo) do print(v) end -- 添加元素 stuInfo.country = "China" stuInfo["habbie"] = "basketball" print(stuInfo.country) print(stuInfo.habbie) -- 删除元素,让索引对应的value指向nil即可 stuInfo.age = nil print(stuInfo.age) print("======== Array test ========") nums = {1, 3, 5, 7, "lwang", "panda", true} -- for k, v in pairs(nums) do -- print(k, v) -- end -- 增加元素 nums[10] = 10 nums[100] = 100 for k, v in pairs(nums) do print(k, v) end -- 修改指定下标的元素值 nums[1] = "darren" for k, v in pairs(nums) do print(k, v) end
table也能混合kv键值对和数组元素
-- 混合 tabele mix = { name = "panda", age = 25, 1, 3, 5, 7, {"hello", "world", false, 3.14} }; for k, v in pairs(mix) do if (type(v) == "table") then for k2, v2 in pairs(v) do print(" ", k2, v2) end else print(k, v) end end
table中的function
function show_func(a, b) print(a, b) end -- 表中的元素需要用,隔开 tb = { show = show_func, add = function (a, b) return a+b; end, sub = function (a, b) return a-b; end, display = function(a) print(a) end } tb.show(100, 200) tb["show"](1, 2) -- 添加方法 tb.mul_func = function(a, b) return a*b; end print(tb.mul_func(2, 2)) print(tb["mul_func"](3, 3)) tb.display("hello,world")
运行结果
使用table模拟计算器类,实现加减乘除
-- 模拟计算器类 calculator = { add = function () calculator.result = calculator.val1 + calculator.val2; end, sub = function () calculator.result = calculator.val1 - calculator.val2; end, mult = function () calculator.result = calculator.val1 * calculator.val2; end, div = function () calculator.result = calculator.val1 / calculator.val2; end, show = function() print(calculator.result) end, val1 = 0, val2 = 0, result = 0 } calculator.val1 = 100 calculator.val2 = 200 calculator.add() calculator.show() calculator.sub() calculator.show() calculator.mult() calculator.show() calculator.div() calculator.show()
运行结果: