没有合适的资源?快使用搜索试试~ 我知道了~
首页Lua编程经典教程:深入理解与实战应用
Lua编程经典教程:深入理解与实战应用
需积分: 44 0 下载量 177 浏览量
更新于2024-07-24
收藏 1.2MB PDF 举报
"《Programming in Lua.pdf》是一本经典的Lua编程教程,由 Roberto Ierusalimschy 编写并授权给 www.luachina.net 进行翻译。这本书的核心价值在于它简洁而高效的理念,强调编程语言的易用性和内在力量。Lua是一种轻量级脚本语言,以其灵活性和在游戏开发、嵌入式系统以及服务器端编程中的广泛应用而著名。 该书的版权声明强调了个人使用在线版的限制,即只能用于个人学习,禁止复制到其他网站或任何形式的进一步分发,除非获得作者 Roberto Ierusalimschy 的明确许可。这反映了Lua语言对于知识产权的尊重和保护,同时也突出了原创作品的专属性。 在编程的世界里,正如金庸笔下的武侠世界一样,招式(编程语言)并非决定胜负的唯一因素。书中可能会详细探讨Lua语言的基本语法、数据类型、控制结构、函数和模块化设计等内容,这些都是编程的基础,但更重要的是如何巧妙地运用这些工具来解决问题,创造出具有强大功能的应用。Lua的设计理念是“简单就是美”,这意味着它的语法简洁,易于理解和学习,使得程序员能够迅速上手并发挥出其潜在的威力。 通过深入理解Lua,程序员可以学会如何编写高效的代码,如何利用其轻量级特性在资源受限的环境中运行,以及如何与其他语言进行交互。书中可能还会涉及面向对象编程、错误处理、并发编程等高级主题,帮助读者提升编程技能,适应不断变化的IT行业需求。 《Programming in Lua.pdf》是一本值得深入研究的教材,它不仅教授Lua语言本身,还教会读者如何像武林高手那样,即使面对看似平凡的招式也能展现出独特的技巧和力量。”
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/6825009/bg10.jpg)
Programming in Lua
Copyright ® 2005, Roberto Ierusalimschy & www.luachina.net
6
Lua 5.0 Copyright © 1994-2003 Tecgraf, PUC-Rio
>
你键入的每个命令(比如:"Hello World")在你键入回车之后立即被执行,键入文
件结束符可以退出交互模式(Ctrl-D in Unix, Ctrl-Z in DOS/Windows),或者调用 OS 库
的 os.exit()函数也可以退出。
在交互模式下,Lua 通常把每一个行当作一个 Chunk,但如果 Lua 一行不是一个完
整的 Chunk 时,他会等待继续输入直到得到一个完整的 Chunk.在 Lua 等待续行时,显示
不同的提示符(一般是>>).
可以通过指定参数让 Lua 执行一系列 Chunk。例如:假定一个文件 a 内有单个语句
x=1;另一个文件 b 有语句 print(x)
prompt> lua -la -lb
命令首先在一个 Chunk 内先运行 a 然后运行 b。(注意:-l 选项会调用 require,将会
在指定的目录下搜索文件,如果环境变量没有设好,上面的命令可能不能正确运行。我
们将在 8.1 节详细更详细的讨论 the require function)
-i 选项要求 Lua 运行指定 Chunk 后进入交互模式.
prompt> lua -i -la -lb
将在一个 Chunk 内先运行 a 然后运行 b,最后直接进入交互模式。
另一个连接外部 Chunk 的方式是使用 dofile 函数,dofile 函数加载文件并执行它.假
设有一个文件:
-- file 'lib1.lua'
function norm (x, y)
local n2 = x^2 + y^2
return math.sqrt(n2)
end
function twice (x)
return 2*x
end
在交互模式下:
> dofile("lib1.lua") -- load your library
> n = norm(3.4, 1.0)
> print(twice(n)) --> 7.0880180586677
-i 和 dofile 在调试或者测试 Lua 代码时是很方便的。
![](https://csdnimg.cn/release/download_crawler_static/6825009/bg11.jpg)
Programming in Lua
Copyright ® 2005, Roberto Ierusalimschy & www.luachina.net
7
1
1
.
.
2
2
全
全
局
局
变
变
量
量
全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初
始化的全局变量也不会出错,只不过得到的结果是:nil.
print(b) --> nil
b = 10
print(b) --> 10
如果你想删除一个全局变量,只需要将变量负值为 nil
b = nil
print(b) --> nil
这样变量 b 就好像从没被使用过一样.换句话说, 当且仅当一个变量不等于 nil 时,
这个变量存在。
1
1
.
.
3
3
词
词
法
法
约
约
定
定
标示符:字母(letter)或者下划线开头的字母、下划线、数字序列.最好不要使用下划
线加大写字母的标示符,因为 Lua 的保留字也是这样的。Lua 中,letter 的含义是依赖于
本地环境的。
保留字:以下字符为 Lua 的保留字,不能当作标识符。
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while
注意:Lua 是大小写敏感的.
注释:单行注释:--
多行注释:--[[ --]]
--[[
print(10) -- no action (comment)
--]]
1
1
.
.
4
4
命
命
令
令
行
行
方
方
式
式
lua [options] [script [args]]
![](https://csdnimg.cn/release/download_crawler_static/6825009/bg12.jpg)
Programming in Lua
Copyright ® 2005, Roberto Ierusalimschy & www.luachina.net
8
-e:直接将命令传入 Lua
prompt> lua -e "print(math.sin(12))" --> -0.53657291800043
-l:加载一个文件.
-i:进入交互模式.
_PROMPT 内置变量作为交互模式的提示符
prompt> lua -i -e "_PROMPT=' lua> '"
lua>
Lua 的运行过程,在运行参数之前,Lua 会查找环境变量 LUA_INIT 的值,如果变
量存在并且值为@filename,Lua 将加载指定文件。如果变量存在但不是以@开头,Lua
假定 filename 为 Lua 代码文件并且运行他。利用这个特性,我们可以通过配置,灵活的
设置交互模式的环境。可以加载包,修改提示符和路径,定义自己的函数,修改或者重
命名函数等。
全局变量 arg 存放 Lua 的命令行参数。
prompt> lua script a b c
在运行以前,Lua 使用所有参数构造 arg 表。脚本名索引为 0,脚本的参数从 1 开始
增加。脚本前面的参数从-1 开始减少。
prompt> lua -e "sin=math.sin" script a b
arg 表如下:
arg[-3] = "lua"
arg[-2] = "-e"
arg[-1] = "sin=math.sin"
arg[0] = "script"
arg[1] = "a"
arg[2] = "b"
![](https://csdnimg.cn/release/download_crawler_static/6825009/bg13.jpg)
Programming in Lua
Copyright ® 2005, Roberto Ierusalimschy & www.luachina.net
9
第
第
2
2
章
章
类
类
型
型
和
和
值
值
Lua 是动态类型语言,变量不要类型定义。Lua 中有 8 个基本类型分别为:nil、boolean、
number、string、userdata、function、thread 和 table。函数 type 可以测试给定变量或者值
的类型。
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
print(type(type(X))) --> string
变量没有预定义的类型,每一个变量都可能包含任一种类型的值。
print(type(a)) --> nil ('a' is not initialized)
a = 10
print(type(a)) --> number
a = "a string!!"
print(type(a)) --> string
a = print -- yes, this is valid!
a(type(a)) --> function
注意上面最后两行,我们可以使用 function 像使用其他值一样使用(更多的介绍参
考第六章)。一般情况下同一变量代表不同类型的值会造成混乱,最好不要用,但是特殊
情况下可以带来便利,比如 nil。
2
2
.
.
1
1
N
N
i
i
l
l
Lua 中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为 nil;
给全局变量负 nil 可以删除该变量。
2
2
.
.
2
2
B
B
o
o
o
o
l
l
e
e
a
a
n
n
s
s
两个取值 false 和 true。但要注意 Lua 中所有的值都可以作为条件。在控制结构的条
件中除了 false 和 nil 为假,其他值都为真。所以 Lua 认为 0 和空串都是真。
![](https://csdnimg.cn/release/download_crawler_static/6825009/bg14.jpg)
Programming in Lua
Copyright ® 2005, Roberto Ierusalimschy & www.luachina.net
10
2
2
.
.
3
3
N
N
u
u
m
m
b
b
e
e
r
r
s
s
表示实数,Lua 中没有整数。一般有个错误的看法 CPU 运算浮点数比整数慢。事实
不是如此,用实数代替整数不会有什么误差(除非数字大于 100,000,000,000,000)。Lua
的 numbers 可以处理任何长整数不用担心误差。你也可以在编译 Lua 的时候使用长整型
或者单精度浮点型代替 numbers,在一些平台硬件不支持浮点数的情况下这个特性是非
常有用的,具体的情况请参考 Lua 发布版所附的详细说明。和其他语言类似,数字常量
的小数部分和指数部分都是可选的,数字常量的例子:
4 0.4 4.57e-3 0.3e12 5e+20
2
2
.
.
4
4
S
S
t
t
r
r
i
i
n
n
g
g
s
s
指字符的序列。lua 是 8 位字节,所以字符串可以包含任何数值字符,包括嵌入的 0。
这意味着你可以存储任意的二进制数据在一个字符串里。Lua 中字符串是不可以修改的,
你可以创建一个新的变量存放你要的字符串,如下:
a = "one string"
b = string.gsub(a, "one", "another") -- change string parts
print(a) --> one string
print(b) --> another string
string 和其他对象一样,Lua 自动进行内存分配和释放,一个 string 可以只包含一个
字母也可以包含一本书,Lua 可以高效的处理长字符串,1M 的 string 在 Lua 中是很常见
的。可以使用单引号或者双引号表示字符串
a = "a line"
b = 'another line'
为了风格统一,最好使用一种,除非两种引号嵌套情况。对于字符串中含有引号的
情况还可以使用转义符\来表示。Lua 中的转义序列有:
\a bell
\b back space -- 后退
\f form feed -- 换页
\n newline -- 换行
\r carriage return -- 回车
\t horizontal tab -- 制表
\v vertical tab
\\ backslash -- "\"
\" double quote -- 双引号
\' single quote -- 单引号
剩余244页未读,继续阅读
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
winly
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)