济南品牌网站建设,wordpress登录没反应,做网站模板在哪儿找,直播app开发哪家好1 Lua
1.1 lua是什么
Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学#xff08;Pontifical Catholic University of Rio de Janeiro#xff09;里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开…1 Lua
1.1 lua是什么
Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学Pontifical Catholic University of Rio de Janeiro里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成几乎在所有操作系统和平台上都可以编译运行。Lua并没有提供强大的库这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目提供在特定平台上的即时编译功能。
简单来说
Lua 是一种轻量小巧的脚本语言用标准C语言编写并以源代码形式开放 其设计目的是为了嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。
1.2 特性
支持面向过程(procedure-oriented)编程和函数式编程(functional programming)自动内存管理只提供了一种通用类型的表table用它可以实现数组哈希表集合对象语言内置模式匹配闭包(closure)函数也可以看做一个值提供多线程协同进程并非操作系统所支持的线程支持通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制比如数据抽象虚函数继承和重载等。
1.3 应用场景
游戏开发独立应用脚本Web 应用脚本扩展和数据库插件如MySQL Proxy 和 MySQL WorkBench安全系统如入侵检测系统redis中嵌套调用实现类似事务的功能web容器中应用处理一些过滤 缓存等等的逻辑例如nginx。
1.4 lua的安装
有linux版本的安装也有mac版本的安装。。我们采用linux版本的安装
安装步骤,在linux系统中执行下面的命令。 安装lua相关依赖库的支持
yum install libtermcap-devel ncurses-devel libevent-devel readline-develcurl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar -xvzf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux test在/etc/profile中导出Lua工作路径
export LUA_PATH~/lua/?.lua;;2、LUA的基本语法
lua有交互式编程和脚本式编程。
交互式编程就是直接输入语法就能执行。
脚本式编程需要编写脚本然后再执行命令 执行脚本才可以。
一般采用脚本式编程。例如编写一个hello.lua的文件输入文件内容并执行lua hell.lua即可
(1)交互式编程
Lua 提供了交互式编程模式。我们可以在命令行中输入程序并立即查看效果。
Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用
lua -i(2)脚本式编程
1、我们可以将 Lua 程序代码保持到一个以 lua 结尾的文件并执行该模式称为脚本式编程 将如下代码存储在名为 hello.lua 的脚本文件中
print(Hello World)
print(www.baidu.com)使用 lua 名执行以上脚本输出结果为
$ lua hello.lua2、也可以将代码修改为如下形式来执行脚本
#!/usr/bin/luaprint(Hello World)
print(www.baidu.com)为脚本添加可执行权限
2.1 注释
一行注释两个减号是单行注释:
--多行注释
--[[多行注释多行注释--]]2.2 定义变量
Lua 变量有三种类型全局变量、局部变量、表中的域。
全局变量
默认的情况下定义一个变量都是全局变量哪怕是语句块或是函数里
局部变量
如果要用局部变量 需要声明为 local.例如 局部变量的作用域为从声明位置开始到所在语句块结束。
-- 全局变量赋值
a1
-- 局部变量赋值
local b2 如果变量没有初始化则 它的值为nil 这和java中的null不同。
2.3 Lua中的数据类型
Lua 是动态类型语言变量不要类型定义,只需要为变量赋值。 值可以存储在变量中作为参数传递或结果返回。
Lua 中有 8 个基本类型分别为nil、boolean、number、string、userdata、function、thread 和 table。
数据类型描述nil这个最简单只有值nil属于该类表示一个无效值在条件表达式中相当于false。boolean包含两个值false和true。number表示双精度类型的实浮点数string字符串由一对双引号或单引号来表示function由 C 或 Lua 编写的函数userdata表示任意存储在变量中的C数据结构thread表示执行的独立线路用于执行协同程序tableLua 中的表table其实是一个关联数组associative arrays数组的索引可以是数字、字符串或表类型。在 Lua 里table 的创建是通过构造表达式来完成最简单构造表达式是{}用来创建一个空表。
实例
print(type(Hello world)) -- string
print(type(10.4*3)) -- number
print(type(print)) -- function
print(type(type)) -- function
print(type(true)) -- boolean
print(type(nil)) -- nil2.4 流程控制
(1) if语句
Lua if 语句 由一个布尔表达式作为条件判断其后紧跟其他语句组成。
语法
if(布尔表达式)
then--[ 在布尔表达式为 true 时执行的语句 --]
end(2) if…else语句
Lua if 语句可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码块。
语法
if(布尔表达式)
then--[ 布尔表达式为 true 时执行该语句块 --]
else--[ 布尔表达式为 false 时执行该语句块 --]
end2.5 循环
(1) while循环[满足条件就循环]
Lua 编程语言中 while 循环语句在判断条件为 true 时会重复执行循环体语句。 语法
while(condition)
dostatements
end实例
a10
while( a 20 )
doprint(a 的值为:, a)a a1
end(2) for循环
Lua 编程语言中 for 循环语句可以重复执行指定语句重复次数可在 for 语句中控制。
语法
for varexp1,exp2,exp3
do 执行体
end var 从 exp1 变化到 exp2每次变化以 exp3 为步长递增 var并执行一次 “执行体”。exp3 是可选的如果不指定默认为1。
例子
for i1,9,2
doprint(i)
endfor i1,9,2: i1从1开始循环9循环数据到9结束2每次递增2
(3)repeat…until语句[满足条件结束]
Lua 编程语言中 repeat…until 循环语句不同于 for 和 while循环for 和 while 循环的条件语句在当前循环执行开始时判断而 repeat…until 循环的条件语句在当前循环结束后判断。
语法
repeatstatements
until( condition )2.6 函数
lua中也可以定义函数类似于java中的方法。例如
--[[ 函数返回两个值的最大值 --]]
function max(num1, num2)if (num1 num2) thenresult num1;elseresult num2;endreturn result;
end
-- 调用函数
print(两值比较最大值为 ,max(10,4))
print(两值比较最大值为 ,max(5,6)).. :表示字符串拼接2.7 表
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型如数组、字典等。
Lua也是通过table来解决模块module、包package和对象Object的。
案例
-- 初始化表
mytable {}-- 指定值
mytable[1] Lua-- 移除引用
mytable nil2.7 模块
(1)模块定义
模块类似于一个封装库从 Lua 5.1 开始Lua 加入了标准的模块管理机制可以把一些公用的代码放在一个文件里以 API 接口的形式在其他地方调用有利于代码的重用和降低代码耦合度。
创建一个文件叫module.lua在module.lua中创建一个独立的模块代码如下
-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module {}-- 定义一个常量
module.constant 这是一个常量-- 定义一个函数
function module.func1()print(这是一个公有函数)
endlocal function func2()print(这是一个私有函数)
endfunction module.func3()func2()
endreturn module由上可知模块的结构就是一个 table 的结构因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数。
上面的 func2 声明为程序块的局部变量即表示一个私有函数因此是不能从外部访问模块里的这个私有函数必须通过模块里的公有函数来调用.
(2)require 函数
require 用于 引入其他的模块类似于java中的类要引用别的类的效果。
用法
require(模块名)require 模块名两种都可以。
我们可以将上面定义的module模块引入使用,创建一个test_module.lua文件代码如下
-- test_module.lua 文件
-- module 模块为上文提到到 module.lua
require(module)print(module.constant)module.func3()