Programming in Lua (目录)

 


 

Programming in Lua

 

作者:Roberto Ierusalimschy

翻译:www.luachina.net

 

 

 

 

 

 

 

 

 

 

 

Simple is beautiful

 

 

 


版权声明

Programming in Lua》的翻译由www.luachina.net完成。本站已经征得作者Mr. Roberto Ierusalimschy的同意,可以翻译他的著作并在本站发布,本书的版权归Mr. Roberto Ierusalimschy 所有,有关版权请参考下面引自官方网站的声明,未经许可不得擅自转贴或者以任何形式发布本书,否则后果自负。

Copyright © 2003-2004 Roberto Ierusalimschy. All rights reserved.

This online book is for personal use only. It cannot be copied to other web sites or further distributed in any form.

 

 


译序

“袁承志知道若再谦逊,那就是瞧人不起,展开五行拳,发拳当胸打去。荣彩和旁观三人本来都以为他武功有独到之秘,哪知使出来的竟是武林中最寻常不过的五行拳。敌对三人登时意存轻视,温青脸上不自禁露出失望的神色。

“荣彩心中暗喜,双拳如风,连抢三下攻势,满拟自己的大力魔爪手江南独步,三四招之间就可破去对方五行拳,那知袁承志轻描淡写的一一化解。再拆数招,荣彩暗暗吃惊,原来对方所使虽是极寻常的拳术,但每一招均是含劲不吐,意在拳先,举手抬足之间隐含极浑厚的内力。”

——金庸《碧血剑》

 

编程语言之于程序员,若武功招式之于习武之人,招式虽重要,却更在于使用之人。胜者之道,武功只行于表,高手用剑,片草只叶亦威力无穷。

当今武林,派别林立,语言繁杂,林林总总不计其数。主流文化的C/C++JavaC#VB[1];偏安一隅的Fortran;动态语言中的PerlTclRubyForthPython,以及本书介绍的Lua;……,等等等等。再加上世界上那些不知道躲在哪的旮旯的奇奇怪怪的hacker捣鼓出来的异想天开的语言,要想各类语言样样精通,不异于痴人说梦。不信可欣赏一下BrainFuck语言[2]Hello World程序,语言本身依如其名。-J-

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.#>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.

虽说语言的威力依使用者本身的修为高低而定,但不同语言本身的设计又有不同。若让用Java写写操作系统内核、Perl写写驱动程序、C/C++写写web应用,都无异于舍近求远,好刀只用上了刀背。

Lua本身是以简单优雅为本,着眼于处理那些C不擅长的任务。借助C/C++为其扩展,Lua可闪现无穷魅力。Lua本身完全遵循ANSI C而写成,只要有C编译器的地方,Lua便可发挥她的力量。Lua不需要追求Python那样的大而全的库,太多累赘,反而破坏了她的优美。

语言的优美,来自于使用者自己的感悟。Lua的优雅,也只有使用后才会明白。

扬起帆,让我们一同踏上Lua的学习之旅……

 

本书的翻译,是www.luachina.net中朋友们共同努力的结果。下面是参与翻译与校对的朋友:

-- file: 'thanks.lua'

-- desc: to print the list of the contributing guys

 

helpful_guys = {

    "----参与翻译----",

    "buxiu", "凤舞影天", "zhang3",

    "morler", "lambda", "sunlight",

    "/n",

 

    "----参与校对----",

    "凤舞影天", "doyle", "flicker",

    "花生魔人", "zhang3", "kasicass",

    "/n"

}

 

for _,e in ipairs(helpful_guys) do

    print(e)

end

 

 

 

www.luachina.net翻译组

2005 7 26

注:本pdf为翻译稿,校对工作正在进行。

 


目录

版权声明... 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

4.4 breakreturn语句... 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 39

7.1 迭代器与闭包... 39

7.2 范性for的语义... 41

7.3 无状态的迭代器... 42

7.4 多状态的迭代器... 43

7.5 真正的迭代器... 44

8 编译·运行·错误信息... 46

8.1 require函数... 48

8.2 C Packages. 49

8.3 错误... 50

8.4 异常和错误处理... 51

8.5 错误信息和回跟踪(Tracebacks... 52

9 协同程序... 55

9.1 协同的基础... 55

9.2 管道和过滤器... 57

9.3 用作迭代器的协同... 60

9.4 非抢占式多线程... 62

10 完整示例... 67

10.1 Lua作为数据描述语言使用... 67

10.2 马尔可夫链算法... 70

第二篇 tablesobjects. 74

11 数据结构... 75

11.1 数组... 75

11.2 矩阵和多维数组... 76

11.3 链表... 77

11.4 队列和双端队列... 77

11.5 集合和包... 79

11.6 字符串缓冲... 79

12 数据文件与持久化... 83

12.1 序列化... 85

13 Metatables and Metamethods. 91

13.1 算术运算的Metamethods. 91

13.2 关系运算的Metamethods. 94

13.3 库定义的Metamethods. 95

13.4 表相关的Metamethods. 96

14 环境... 102

14.1 使用动态名字访问全局变量... 102

14.2声明全局变量... 103

14.3 非全局的环境... 105

15 Packages. 108

15.1 基本方法... 108

15.2 私有成员(Privacy... 110

15.3 包与文件... 111

15.4 使用全局表... 112

15.5 其他一些技巧(Other Facilities... 114

16 面向对象程序设计... 117

16.1 ... 118

16.2 继承... 120

16.3 多重继承... 121

16.4 私有性(privacy... 124

16.5 Single-Method的对象实现方法... 126

17 Weak... 127

17.1 记忆函数... 129

17.2 关联对象属性... 130

17.3 重述带有默认值的表... 131

第三篇 标准库... 133

18 数学库... 134

19 Table... 135

19.1数组大小... 135

19.2 插入/删除... 136

19.3 排序... 136

20 String... 139

20.1 模式匹配函数... 140

20.2 模式... 142

20.3 捕获(Captures... 145

20.4 转换的技巧(Tricks of the Trade... 150

21 IO... 156

21.1 简单I/O模式... 156

21.2 完全I/O 模式... 159

22 操作系统库... 164

22.1 DateTime. 164

22.2 其它的系统调用... 166

23 Debug... 168

23.1 自省(Introspective... 168

23.2 Hooks. 172

23.3 Profiles. 173

第四篇 C API 176

24 C API纵览... 177

24.1 第一个示例程序... 178

24.2 堆栈... 180

24.3 C API的错误处理... 185

25 扩展你的程序... 187

25.1 表操作... 188

25.2 调用Lua函数... 192

25.3 通用的函数调用... 194

26 调用C函数... 197

26.1 C 函数... 197

26.2 C 函数库... 199

27 撰写C函数的技巧... 202

27.1 数组操作... 202

27.2 字符串处理... 203

27.3 C函数中保存状态... 206

28 User-Defined Types in C. 211

28.1 Userdata. 211

28.2 Metatables. 214

28.3 访问面向对象的数据... 216

28.4 访问数组... 218

28.5 Light Userdata. 219

29 资源管理... 221

29.1 目录迭代器... 221

29.2 XML解析... 224

第四篇 附录... 233

A. 终端机控制符 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值