Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
简单来说:
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
lua 语言具有以下特性:
应用场景:
tar zxf lua-5.4.2.tar.gz
cd lua-5.4.2/
make linux
make install
启动lua
lua
或者
lua -i
进入了lua界面…
lua有交互式编程和脚本式编程。
交互式编程
输入lua
启动lua,直接进行交互输入,输入一句,输出一句。
脚本式编程
创建lua脚本 hello.lua
print("hello world")
if(0) then
print("0 为 true")
else
print("0 不为true")
end
执行lua脚本
lua hello.lua
输出结果:
[root@instance lua-script]# lua hello.lua
hello world
0 为 true
Lua 是动态类型语言,变量**不用类型定义**
(和python类似),只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。
Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。
(可以使用函数type()查看该值类型)
nil
只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
未定义的值,直接查询,输出nil
> c
nil
boolean
包含两个值:false和true。
a=true
number
表示双精度类型的实浮点数
a=10
string
字符串由一对双引号或单引号来表示
s="string1"
function
由 C 或 Lua 编写的函数
function fun()
print("aaa")
end
userdata
表示任意存储在变量中的C数据结构.userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
thread
表示执行的线路,用于执行协同程序.
在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
table
Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
-- 创建一个空的 table
local tbl1 = {}
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}
-- 单独赋值
table[1]=99
--移除定义
table[1]=nil
array = {"Lua", "Tutorial"}
for i= 0, 2 do
print(array[i])
end
变量分为全局变量
和局部变量
全局变量
a=3 --一般都是定义的全局变量
局部变量
> local a=3
> a
nil
函数也有局部的
loacl function max()
end
--
--[
这里是注释
还是注释
--]
if
‐‐[ 0 为 true ]
if(0) then
print("0 为 true")
else
print("0 不为true")
end
while
-- 谨慎输入
while( true )
do
print("循环将永远执行下去")
end
for
for a= 1,10
do
print(a)
end
break
--[ 定义变量 --]
a = 10
--[ while 循环 --]
while( a < 20 )
do
print("a 的值为:", a)
a=a+1
if( a > 15)
then
--[ 使用 break 语句终止循环 --]
break
end
end
goto
编写lua脚本
vi hello.lua
local a = 1
::label:: print("--- goto label ---")
a = a+1
if a < 3 then
goto label -- a 小于 3 的时候跳转到标签 label
end
执行lua脚本,结果:
[root@instance lua-script]# lua hello.lua
--- goto label ---
--- goto label ---
有了 goto,我们可以实现 continue 的功能:
for i=1, 3 do
if i <= 2 then
print(i, "yes continue")
goto continue
end
print(i, " no continue")
::continue::
print([[i'm end]])
end
执行结果:
[root@instance-c9m0dcrw lua-script]# lua hello.lua
1 yes continue
i'm end
2 yes continue
i'm end
3 no continue
i'm end
--[[ 函数返回两个值的最大值 --]]
function max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
-- 调用函数
print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))
结果:
两值比较最大值为 10
两值比较最大值为 6
moduel.lua脚本
-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
-- 定义一个常量
module.constant = "这是一个常量"
-- 定义一个函数
function module.func1()
io.write("这是一个公有函数!\n")
end
local function func2()
print("这是一个私有函数!")
end
function module.func3()
func2()
end
return module
test_module.lua 文件
-- test_module.lua 文件
-- module 模块为上文提到到 module.lua
require("module")
--module 模块的常量
print(module.constant)
--module 模块的v
module.func3()
::label:: 是标签
.. 表示拼接,例如 print("a是"..a)
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务