Lua基本教程

本文详细介绍了在Linux和Windows系统上安装Lua的方法,包括基本数据类型、斐波那契数列、泛型循环、函数返回值、方法重载等,并展示了字符串操作、表操作、模块加载以及一些高级特性如元表和模块实例。适合初学者和进阶者学习。
--Linux 系统上安装
--curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
--tar zxf lua-5.3.0.tar.gz
--cd lua-5.3.0
--make linux test
--make install

--Window 系统上安装 Lua
--Github 下载地址:https://github.com/rjpcomputing/luaforwindows/releases

--8种数据类型
--number(只有双精度类型double),string(字符串间用..连接,而不是+,+表示计算),
--boolean,nil,
--table(即动态的关联数组,声明形式a={},赋值形式a[],获取形式a[]或a.i(当索引为字符串类型时的一种简化写法),索引从1开始),function(可作为参数传递,支持函数式编程)
--thread,userdata

--斐波那契数列
function fib(n)
    if n <= 2 then
        return 1
    end
    prev2 = 1
    prev1 = 1
    result = 0
    for _ = 3, n, 1 do
        result = prev2 + prev1
        prev2 = prev1
        prev1 = result
    end
    return result
end
print(fib(50))--12586269025

--泛型for循环
--1	one
--2	two
--3	three
a = { "one", "two", "three" }
for i, v in ipairs(a) do
    print(i, v)
end

--泛型for循环,达到continue效果,当v=3时跳过(lua里没有continue关键字)
--1
--2
--4
--5
arrays = { 1, 2, 3, 4, 5 }
for _, v in ipairs(arrays) do
    flag = true
    while (flag)
    do
        flag = false
        if (v == 3) then
            break
        end
        print(v)
    end
end

--while循环
--b:	2
--b:	1
b = 2
while (true)
do
    print([[b]] .. [[:]], b)
    b = b - 1
    if b == 0 then
        break
    end
end

--repeat循环(类似Java中的do while)
--c:	1
--c:	2
c = 1
repeat
    print('c' .. ':', c)
    c = c + 1
until (c == 3)

--一个函数返回多个值
--1	 2	3
function add(num1, num2)
    return num1, num2, num1 + num2
end
print(add(1, 2))

--方法重载,可变参数
--6
function add(...)
    --局部变量
    local rs = 0
    for _, v in ipairs(...) do
        rs = rs + v
    end
    return rs
end
print(add({ 1, 2, 3 }))

--string常用方法
s = 'hello'
s1 = 'HELLO'
print(string.upper(s))--HELLO
print(string.lower(s1))--hello
--连接
print(s .. s1)--helloHELLO
--替换
print(string.gsub(s, 'l', 'x'))--hexxo	2(替换了2次)
print(string.gsub(s, 'l', 'x', 1))--hexlo	1(替换了1次)
--查找
print(string.find(s, 'l'))--3  3(从1开始的起始索引为3,结束索引为3)
print(string.find(s, 'l', 4))--4  4(从4开始的起始索引为4,结束索引为4)
print(string.find(s, 'l', 5))--nil(从5开始的起始索引为nil,找不到)
print(string.find(s, 'a'))--nil(找不到)
--求长度
print(string.len(s))--5
print(#s)--5
--截取
print(string.sub(s, 2))--ello
print(string.sub(s, 2, 3))--el
print(string.sub(s, 2, 4))--ell
--反转
print(string.reverse(s))--olleh
--拷贝
print(string.rep('abc', 2))--abcabc

--表操作
t = { { 3, 2, 1 }, { 'q', 'w', 'e' } }
--新增
--方式一
t[3] = { 'a', 'b' }
--方式二
--table.insert(t, { 'a', 'b' })

--修改表t中第3个元素的值
t[3] = { 4, 5, 6 }

--删除
--t[3] = nil
--table.remove(t)

for i, v in pairs(t) do
    local r = ''
    for i, v in pairs(v) do
        r = r .. v
    end
    print('{' .. r .. '}')
end

--表排序
fruits = { "banana", "orange", "apple", "grapes" }
print("排序前")
for k, v in ipairs(fruits) do
    print(k, v)
end

table.sort(fruits)
print("排序后")
for k, v in ipairs(fruits) do
    print(k, v)
end

--元表(类似Json)
mt = { a = 'a', b = 'b' }
for i, v in pairs(mt) do
    print(i, v)
end

--模块
require('com.lyf.lua.module1')
print(module.a)
module.func1()
module.func3()

输出:

lua.exe com/lyf/lua/test.lua
12586269025
1	one
2	two
3	three
1
2
4
5
b:	2
b:	1
c:	1
c:	2
1	2	3
6
HELLO
hello
helloHELLO
hexxo	2
hexlo	1
3	3
4	4
nil
nil
5
5
ello
el
ell
olleh
abcabc
{321}
{qwe}
{456}
排序前
1	banana
2	orange
3	apple
4	grapes
排序后
1	apple
2	banana
3	grapes
4	orange
a	a
b	b
你好
这是一个公有函数!
这是一个私有函数!

 

参考:Lua 教程 | 菜鸟教程

lua中文教程,原名:programming in lua 目录 版权声明..............i 译序..i 目录iii 第一篇语言.......1 第0章序言.......1 0.1 序言..........1 0.2 Lua的使用者................2 0.3 Lua的相关资源............3 0.4 本书的体例.................3 0.5 关于本书...3 0.6 感谢..........4 第1章起点.......5 1.1 Chunks.......5 1.2 全局变量...7 1.3 词法约定...7 1.4 命令行方式.................7 第2章类型和值9 2.1 Nil..............9 2.2 Booleans....9 2.3 Numbers...10 2.4 Strings......10 2.5 Functions.12 2.6 Userdata and Threads.12 第3章表达式..13 3.1 算术运算符...............13 3.2 关系运算符...............13 3.3 逻辑运算符...............13 3.4 连接运算符...............14 3.5 优先级.....15 3.6表的构造..15 第4章基本语法................18 4.1 赋值语句.18 4.2 局部变量与代码块(block)......19 4.3 控制结构语句...........20 Programming in Lua iv Copyright ® 2005, Translation Team, www.luachina.net 4.4 break和return语句......23 第5章函数......24 5.1 返回多个结果值.......25 5.2可变参数..27 5.3 命名参数.28 第6章再论函数................30 6.1 闭包........32 6.2 非全局函数...............34 6.3 正确的尾调用(Proper Tail Calls)...36 第7章迭代器与泛型for....40 7.1 迭代器与闭包...........40 7.2 范性for的语义...........42 7.3 无状态的迭代器.......43 7.4 多状态的迭代器.......44 7.5 真正的迭代器...........45 第8章编译·运行·调试47 8.1 require函数.................49 8.2 C Packages.................50 8.3 错误........51 8.4 异常和错误处理.......52 8.5 错误信息和回跟踪(Tracebacks)....53 第9章协同程序................56 9.1 协同的基础...............56 9.2 管道和过滤器...........58 9.3 用作迭代器的协同...61 9.4 非抢占式多线程.......63 第10章完整示例..............68 10.1 Lua作为数据描述语言使用........68 10.2 马尔可夫链算法.....71 第二篇 tables与objects........75 第11章数据结构..............76 11.1 数组......76 11.2 阵和多维数组.........77 11.3 链表......78 11.4 队列和双端队列.....78 11.5 集合和包.................80 11.6 字符串缓冲.............80 第12章数据文件与持久化..................84 12.1 序列化...86 Programming in Lua v Copyright ® 2005, Translation Team, www.luachina.net 第13章 Metatables and Metamethods...92 13.1 算术运算的Metamethods............92 13.2 关系运算的Metamethods............95 13.3 库定义的Metamethods................96 13.4 表相关的Metamethods................97 第14章环境..103 14.1 使用动态名字访问全局变量...103 14.2声明全局变量........104 14.3 非全局的环境.......106 第15章 Packages.............109 15.1 基本方法...............109 15.2 私有成员(Privacy)................111 15.3 包与文件................112 15.4 使用全局表............113 15.5 其他一些技巧(Other Facilities)...115 第16章面向对象程序设计.................118 16.1 类.........119 16.2 继承.....121 16.3 多重继承...............122 16.4 私有性(privacy)...................125 16.5 Single-Method的对象实现方法127 第17章 Weak表...............128 17.1 记忆函数...............130 17.2 关联对象属性.......131 17.3 重述带有默认值的表...............132 第三篇标准库134 第18章数学库................135 第19章 Table库...............136 19.1数组大小................136 19.2 插入/删除..............137 19.3 排序.....137 第20章 String库..............140 20.1 模式匹配函数.......141 20.2 模式.....143 20.3 捕获(Captures).146 20.4 转换的技巧(Tricks of the Trade)151 第21章 IO库..157 21.1 简单I/O模式..........157 21.2 完全I/O 模式........160 Programming in Lua vi Copyright ® 2005, Translation Team, www.luachina.net 第22章操作系统库........165 22.1 Date和Time............165 22.2 其它的系统调用...167 第23章 Debug库..............169 23.1 自省(Introspective)..............169 23.2 Hooks...173 23.3 Profiles.174 第四篇 C API..177 第24章 C API纵览..........178 24.1 第一个示例程序...179 24.2 堆栈.....181 24.3 C API的错误处理..186 第25章扩展你的程序....188 25.1 表操作.189 25.2 调用Lua函数.........193 25.3 通用的函数调用...195 第26章调用C函数..........198 26.1 C 函数..198 26.2 C 函数库................200 第27章撰写C函数的技巧..................203 27.1 数组操作...............203 27.2 字符串处理...........204 27.3 在C函数中保存状态.................207 第28章 User-Defined Types in C........212 28.1 Userdata.................212 28.2 Metatables..............215 28.3 访问面向对象的数据...............217 28.4 访问数组...............219 28.5 Light Userdata........220 第29章资源管理............222 29.1 目录迭代器...........222 29.2 XML解析...............225
Lua 教程 lua Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。 设计目的 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua 特性 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。 可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。 其它特性: 支持面向过程(procedure-oriented)编程和函数式编程(functional programming); 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象; 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持; 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。 Lua 应用场景 游戏开发 独立应用脚本 Web 应用脚本 扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench 安全系统,如入侵检测系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风流倜傥唐伯虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值