预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共37页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C/C++程序员的Lua快速入门 指南 RobertZ 2010-1 前言 本文针对的读者是有经验的C/C++程序员,希望了解Lua或者迅速抓住Lua的关键 概念和模式进行开发的。因此本文并不打算教给读者条件语句的语法或者函数定 义的方式等等显而易见的东西,以及一些诸如变量、函数等编程语言的基本概 念。本文只打算告诉读者Lua那些与C/C++显著不同的东西以及它们实际上带来了 怎样不同于C/C++的思考方式。不要小看它们,它们即将颠覆你传统的C/C++的世 界观! 本文一共分初阶、进阶和高阶三大部分,每个部分又有若干章节。读者应当从 头至尾循序渐进的阅读,但是标有“*”号的章节(主要讨论OO在Lua中的实现方 式)可以略去而不影响对后面内容的理解。读者只要把前两部分完成就可以胜任 Lua开发的绝大部分任务。高阶部分可作为选择。 本文不打算取代Lua参考手册,因此对一些重要的Lua函数也未做足够的说明。 在阅读的同时或者之后,读者应当在实践中多多参考Lua的正式文档(附录里列出 了一些常用的Lua参考资料)。 请访问本文的在线版本获得最新更新。 另外,作者还有一个开源的Lua调试器——RLdb以及一个讨论Lua的站点,欢迎 访问。 欢迎读者来信反馈意见。 初阶话题 数据类型 函数 表 简单对象的实现* 简单继承* 数据类型 八种基本类型: 数值(number) 内部以double表示 字符串(string) 总是以零结尾,但可以包含任意字符(包括零),因此并不等价于C字符串, 而是其超集。 布尔(boolean) 只有“true”或者“false”两个值。 函数(function) Lua的关键概念之一。不简单等同于C的函数或函数指针。 表(table) 异构的Hash表。Lua的关键概念之一。 userdata 用户(非脚本用户)定义的C数据结构。脚本用户只能使用它,不能定义。 线程(thread) Lua协作线程(coroutine),与一般操作系统的抢占式线程不一样。 nil 代表什么也没有,可以与C的NULL作类比,但它不是空指针。 函数 functionfoo(a,b,c) localsum=a+b returnsum,c--函数可以返回多个值 end r1,r2=foo(1,'123','hello')--平行赋值 print(r1,r2) 输出结果: 124hello 函数(续) 函数定义 用关键字function定义函数,以关键字end结束 局部变量 用关键字local定义。如果没有用local定义,即使在函数内部定义的变量也 是全局变量! 函数可以返回多个值 returna,b,c,... 平行赋值 a,b=c,d 全局变量 前面的代码定义了三个全局变量:foo、r1和r2 表 a={}输出结果: b={x=1,["hello,"]="world!"}1=>100 a.astring="ni,hao!"atable=>table:003D7238 a[1]=100astring=>ni,hao! a["atable"]=bfunction: 003DBCE0=>function: functionfoo()003DBD00 end---------------------------- functionbar()hello,=>world! endx=>1 a[foo]=bar --分别穷举表a和b fork,vinpairs(a)do print(k,"=>",v) end print("----------------------------") fork,vinpairs(b)do print(k,"=>",v) end 表 定义表(Table)的方式 a={},b={…} 访问表的成员 通过“.”或者“[]”运算符来访问表的成员。 注意:表达式a.b等价于a[“b”],但不等价于a[b] 表项的键和值 任何类型的变量,除了nil,都可以做为表项的键。从简单的数值、字符串 到复杂的函数、表等等都可以;同样,任何类型的变量,除了nil,都可以 作为表项的值。给一个表项的值赋nil意味着从表中删除这一项,比如令a.b =nil,则把表a中键为“b”的项删除。如果访问一个不存在的表项,其值 也是nil,比如有c=a.b,但表a中没有键为“b”的项,则c等于nil。 一种简单的对象实现方式* functioncreate(name,id)o1=create("Sam",001) localobj={name=name,id=id} functionobj:SetName(name)print("o1'sname:",o1:GetName(), self.name=n