Lua学习笔记

lua是什么

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

特性

支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。

应用场景

游戏开发
独立应用脚本
Web 应用脚本
扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
安全系统,如入侵检测系统
redis中嵌套调用实现类似事务的功能
web容器中应用处理一些过滤 缓存等等的逻辑,例如nginx。

安装

curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar zxf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux test
make install
//记得安装gcc,否则提示找不到make命令。
yum install gcc gcc-c++
yum -y install gcc automake autoconf libtool make
遇到的坑:lua.c:82:10: 致命错误:readline/readline.h:No such file or directory
执行命令安装库:yum install libtermcap-devel ncurses-devel libevent-devel readline-devel

入门

1、脚本编程
touch hello.lua
vi hello.lua
在文件中输入print("hello");
执行命令 lua hello.lua 即可。
2、Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用。
3、一行注释:两个减号是单行注释:--
4、多行注释--[[
 多行注释
 多行注释
 --]]
5-- 全局变量赋值  
a=1
-- 局部变量赋值 有local
local b=2 
-- 如果变量没有初始化:则它的值为nil。

数据类型:
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true。
number 表示双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(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))                --> nil
-- if语句
if(布尔表达式)
then
   --[ 在布尔表达式为 true 时执行的语句 --]
end
-- if..else语句
if(布尔表达式)
then
   --[ 布尔表达式为 true 时执行该语句块 --]
else
   --[ 布尔表达式为 false 时执行该语句块 --]
end
-- 循环
a=10
while( a < 20 )
do
   print("a 的值为:", a)
   a = a+1
end
-- for循环
for var=exp1,exp2,exp3 
do  
    <执行体>  
end  
-- exp1初始值,exp2结束限制,exp3是exp1的递增量
for i=1,9,2
do
   print(i)
end
-- 输出 1 3 5 7 9
-- repeat…until语句  [==满足条件结束==]
num = 5
repeat
   print(num)
   num = num + 1
until( num > 10)
-- 函数
--[[ 函数返回两个值的最大值 --]]
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))

-- 表
-- table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
-- Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。
-- 初始化表
mytable = {}
-- 指定值
mytable[1]= "Lua"
-- 移除引用
mytable = nil

模块:模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
创建一个文件叫module.lua,在module.lua中创建一个独立的模块.

-- 定义一个名为 module 的模块
module = {}
-- 定义一个常量
module.constant = "这是一个常量"
-- 定义一个函数
function module.func1()
    print("这是一个公有函数")
end
local function func2()
    print("这是一个私有函数!")
end
function module.func3()
    func2()
end
return module

模块的结构就是一个 table 的结构,因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数。
上面的 func2 声明为程序块的局部变量,即表示一个私有函数,因此是不能从外部访问模块里的这个私有函数,必须通过模块里的公有函数来调用。
require 函数

-- test_module.lua 文件
-- module 模块为上文提到到 module.lua
require("module")
print(module.constant)
module.func3()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值