Lua快速入门
lua初识
Lua [1] 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。 [2] Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。 [2] 一个完整的Lua解释器不过200k,在所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
在线学习
luatos支持在线运行lua语言
常用语法
-
输入hello world!
print("hello world!")
[23:29:17] 虚拟机初始化完毕
[23:29:17] hello world!
[23:29:17] 虚拟机已停止运行 -
声明变量
-- 声明局部变量,可以在多个文件共用 local a = 1 -- 声明全局变量,只可在本文件局部使用 b = 2
-
多重赋值
-- 多重赋值,多个变量一起赋值 a,b = 1,2 print(a,b)
[23:43:04] 虚拟机初始化完毕
[23:43:04] 1 2
[23:43:04] 虚拟机已停止运行 -
数据类型 nil
-- nil 类型表示一种没有任何有效值,它只有一个值 – nil。 -- 打印一个没有赋值的变量,便会输出一个 nil 值,如下所示 print(a)
[23:40:51] 虚拟机初始化完毕
[23:40:51] nil
[23:40:51] 虚拟机已停止运行 -
数值型 number
-- lua数值类型只有number -- 支持16进制 a = 0x1 print(a) -- 支持科学记数法,如赋值2的十次方 b = 2e10 print(b)
[23:48:52] 虚拟机初始化完毕
[23:48:52] 1
[23:48:52] 20000000000.0
[23:48:52] 虚拟机已停止运行 -
算数运算符
-- 加 2+5 print(2+5) -- 乘 2X5 print(2^5) -- lua5.3支持左移右移符号 1左移3位 print(1<<3)
[23:53:23] 虚拟机初始化完毕
[23:53:23] 7
[23:53:23] 32.0
[23:53:23] 8
[23:53:23] 虚拟机已停止运行 -
string字符串
-- 可双引号 a = "你好!" -- 可单引号 b = '你好!' print(a,b) -- 连接字符串a和b ab = a..b print(ab) -- 支持转义符号 如换行 \n c = "开始换\n行" print(c) -- 输出字符串模板 d = [[aaaa bbbbb ccc]] print(d) -- 可使用tostring把数值型转成字符串 e = tostring(10) print(e) -- 可使用tonumber把字符串转成数值型,转换失败值为nil f = tonumber("10") print(f) -- 可使用#来获取字符串的长度,中文或者中文符号单个长度为3 print(#a)
[00:09:46] 虚拟机初始化完毕
[00:09:46] 你好 你好!
[00:09:46] 你好你好!
[00:09:46] 开始换
行
[00:09:46] aaaa
bbbbb
ccc
[00:09:46] 10
[00:09:46] 10
[00:09:46] 6
[00:09:46] 虚拟机已停止运行 -
function 函数
-- 函数基本语法 function 后加函数名称,(...)内加参数,中间写函数体,最后用end结尾。以下两种写法 function function_name( ... ) -- body end f = function() --body end
-- 函数基本使用 function f(a,b) print(a,b) end f(1,2)
[00:18:05] 虚拟机初始化完毕
[00:18:05] 1 2
[00:18:05] 虚拟机已停止运行-- 函数基本使用 入参比形参多,依然调用可以返回 function f(a,b,c) return a,b end -- 多个返回值可以配合多重赋值语句 local i,j = f(1,2) print(i,j)
[00:21:26] 虚拟机初始化完毕
[00:21:26] 1 2
[00:21:26] 虚拟机已停止运行 -
table数字下标
-- 语法 变量 = {} 数组内什么都可以存,使用逗号分隔即可,第一个元素下标是1.异常返回nil。 a = {1,"ac",{},function() end} print(a[1]) -- 添加/替换指定下标数组元素 a[5] = 123 --打印数组长度 print(#a) -- a数组新增元素d table.insert(a, "d") -- 指定插入a数组第二个位置,其余元素自动后移一位 table.insert(a,2, "dd") --删除a数组中的第二个元素dd table.remove(a, 2)
[00:34:25] 虚拟机初始化完毕
[00:34:25] 1
[00:34:25] 5
[00:34:25] 虚拟机已停止运行 -
table字符串下标
--table字符串类似与map集合 a = { a = 1, b = "123", c = function() end, d = "qwe" } --打印元素a的值,需要带双引号或者单引号 print(a["a"]) --打印元素a的值,a表的b元素内容 print(a.b) --对元素d赋值 a["d"] = "aaaa" print(a.d)
[00:40:27] 虚拟机初始化完毕
[00:40:27] 1
[00:40:27] 123
[00:40:27] aaaa
[00:40:27] 虚拟机已停止运行 -
全局表_G
--所有的变量都在全局表_G中 a=1 print(_G["a"])
[00:42:37] 虚拟机初始化完毕
[00:42:37] 1
[00:42:37] 虚拟机已停止运行 -
布尔值 真与假
a = true b = false print(1>2) print(1<2) print(1>=2) print(1<=2) print(1==2) --使用~=表示不等于 print(1~=2)
[00:45:17] 虚拟机初始化完毕
[00:45:17] false
[00:45:17] true
[00:45:17] false
[00:45:17] true
[00:45:17] false
[00:45:17] true
[00:45:17] 虚拟机已停止运行-- and、or、not的使用 a = nil --假 b = 0 --数字零 真 print(a and b) print(a or b) print(not b) -- 利用返回可以是值,来进行短路运算 print(b > 10 and "yes" or "no")
[00:51:54] 虚拟机初始化完毕
[00:51:54] nil
[00:51:54] 0
[00:51:54] false
[00:51:54] no
[00:51:54] 虚拟机已停止运行 -
if逻辑语
--使用缩进代表代码块 if 1>10 then print("1>10") elseif 1<10 then print("1<10") else print("no") end -- 在lua中 0代表 true if 0 then print("0 is true!") end
[00:56:35] 虚拟机初始化完毕
[00:56:35] 1<10
[00:56:35] 0 is true!
[00:56:35] 虚拟机已停止运行 -
循环(for、while、repeat三种)
-- for循环,可以使用break,打断循环 for i=1,10 do print(i) if i == 5 then break end end print("----------") --可以加步长,如下面的例子,每次运行后,i的值就会加二,步长也可以是负数 for i=1,10,2 do print(i) end
[01:01:25] 虚拟机初始化完毕
[01:01:25] 1
[01:01:25] 2
[01:01:25] 3
[01:01:25] 4
[01:01:25] 5
[01:01:25] ----------
[01:01:25] 1
[01:01:25] 3
[01:01:25] 5
[01:01:25] 7
[01:01:25] 9
[01:01:25] 虚拟机已停止运行-- while循环 local n = 10 while n >1 do iif n == 5 then break end print(n) n = n -1 end
[01:02:59] 虚拟机初始化完毕
[01:02:59] 10
[01:02:59] 9
[01:02:59] 8
[01:02:59] 7
[01:02:59] 6
[01:02:59] 5
[01:02:59] 4
[01:02:59] 3
[01:02:59] 2
[01:02:59] 虚拟机已停止运行