lua简易教程
LUA 脚本语言0基础教程
“red”是自己取名字的哪怕你取成 hongse 也没问题,这句话,已经创建了一个红色值为 255 的颜色对象。 接下来我们吧我们需要的文字打印到屏幕上! screen:print(230,135,"hello world",red) 在 x,y 用我们刚刚创建的颜色对象打印 hello world 的字样! 其实到这里,这个程序已经达到我们的目的了,但是这只有 2 个语句,一瞬间程序就已经 结束了,我们根本来不及看到效果, 那我们就做一个死循环,让他停柱 1 while true do 2 screen.flip() 3 screen.waitVblankStart() 4 end 看第一句,这是一个循环。 ture(真) 所以第一句可翻译成 要是 真就执行 。慢慢理解 来吧~~~ - - 不理解也没关系,往下看 然后第二句 :稍微介绍一下吧。Luaplayer for psp 采用了一种二级缓存的技术,所有的 图形在屏幕下方绘制好,必须要调用 screen.flip()才能吧滴二层屏幕的图形显示给我们看。 第三句:screen.flip()后面更上就对,不然效果就~~~~~(你自己去试试?) 第四句:end 没有什么太特殊的意义, 表示 while 循环体结束,不过注意了 这里它不会 去执行第 5 句,它会跳回第一句执行,因为是循环嘛^_^ 行啦 看看效果,颜色值你可以自己修改,要什么颜色就看你怎么改了,内容也可以改。你 改 "i kill you!" 也行的^_^ 要是你能看见如下效果,那说明两个事, 1.你的开发环境设置好了, 2.这节课你听懂了。 下课~~~~~ - -||
以后就会跳出整个 if 结构外执行,if else 语句,会在表达式计算为假以后,计算 else 后面 的语句,在跳出整个 if。 所以呢。本题的输出结果应该是 20!!! if else 语句的嵌套 例题 3: a = 10 if a > 10 then a=0 elseif a ~= 1 a = 20 end print(a) 解释,if else 的嵌套,其实就是在 if 结构里,在加上一个或者多个 if 语句,本人才疏学浅 - -|不太能解释清楚这个问题。还希望朋友们多多揣摩。 本例题。首先计算 a >10 结果为假于是跳转到 else~~elseif 在计算 a~=1(如果 a 不等 于 1)计算为真,于是执行了 a=20,所以输出结果是~20 下面我们接着讲循环结构语句 for 语句 for 语句的形式 for 变量=起始值,终止值 do 语句 1 语句 2 ……
Lua教程(九):元表与元方法详解
Lua教程(九):元表与元⽅法详解Lua中提供的元表是⽤于帮助Lua数据变量完成某些⾮预定义功能的个性化⾏为,如两个table的相加。
假设a和b都是table,通过元表可以定义如何计算表达式a+b。
当Lua试图将两个table相加时,它会先检查两者之⼀是否有元表,然后检查该元表中是否存在__add字段,如果有,就调⽤该字段对应的值。
这个值就是所谓的“元⽅法”,这个函数⽤于计算table的和。
Lua中每个值都有⼀个元表。
table和userdata可以有各⾃独⽴的元表,⽽其它数据类型的值则共享其类型所属的单⼀元表。
缺省情况下,table在创建时没有元表,如:复制代码代码如下:t = {}print(getmetatable(t)) --输出为nil这⾥我们可以使⽤setmetatable函数来设置或修改任何table的元表。
复制代码代码如下:t1 = {}setmetatable(t,t1)assert(getmetatable(t) == t1)任何table都可以作为任何值的元表,⽽⼀组相关的table也可以共享⼀个通⽤的元表,此元表将描述了它们共同的⾏为。
⼀个table甚⾄可以作为它⾃⼰的元表,⽤于描述其特有的⾏为。
在Lua代码中,只能设置table的元表,若要设置其它类型值的元表,则必须通过C代码来完成。
1. 算术类的元⽅法:在下⾯的⽰例代码中,将⽤table来表⽰集合,并且有⼀些函数⽤来计算集合的并集和交集等。
复制代码代码如下:Set = {}local metatable = {} --元表--根据参数列表中的值创建⼀个新的集合function Set.new(l)local set = {}--将所有由该⽅法创建的集合的元表都指定到metatablesetmetatable(set,metatable)for _, v in ipairs(l) doset[v] = trueendreturn setend--取两个集合并集的函数function Set.union(a,b)local res = Set.new{}for k in pairs(a) dores[k] = trueendfor k in pairs(b) dores[k] = trueendreturn resend--取两个集合交集的函数function Set.intersection(a,b)local res = Set.new{}for k in pairs(a) dores[k] = b[k]endreturn resendfunction Set.tostring(set)local l = {}for e in pairs(set) dol[#l + 1] = eendreturn "{" .. table.concat(l,", ") .. "}";endfunction Set.print(s)print(Set.tostring(s))end--最后将元⽅法加⼊到元表中,这样当两个由Set.new⽅法创建出来的集合进⾏--加运算时,将被重定向到Set.union⽅法,乘法运算将被重定向到Set.intersectionmetatable.__add = Set.unionmetatable.__mul = Set.intersection--下⾯为测试代码s1 = Set.new{10,20,30,50}s2 = Set.new{30,1}s3 = s1 + s2Set.print(s3)Set.print(s3 * s1)--输出结果为:--{1, 30, 10, 50, 20}--{30, 10, 50, 20}在元表中,每种算术操作符都有对应的字段名,除了上述的__add(加法)和__mul(乘法)外,还有__sub(减法)、__div(除法)、__unm(相反数)、__mod(取模)和__pow(乘幂)。
Lua教程(十四):字符串库详解
Lua教程(⼗四):字符串库详解1. 基础字符串函数:字符串库中有⼀些函数⾮常简单,如:1). string.len(s) 返回字符串s的长度;2). string.rep(s,n) 返回字符串s重复n次的结果;3). string.lower(s) 返回s的副本,其中所有的⼤写都被转换为了⼩写形式,其他字符不变;4). string.upper(s) 和lower相反,将⼩写转换为⼤写;5). string.sub(s,i,j) 提取字符串s的第i个到第j个字符。
Lua中,第⼀个字符的索引值为1,最后⼀个为-1,以此类推,如: print(string.sub("[hello world]",2,-2)) --输出hello world6). string.format(s,...) 返回格式化后的字符串,其格式化规则等同于C语⾔中printf函数,如:print(string.format("pi = %.4f",math.pi)) --输出pi = 3.14167). string.char(...) 参数为0到多个整数,并将每个整数转换为对应的字符。
然后返回⼀个由这些字符连接⽽成的字符串,如:print(string.char(97,98,99)) --输出abc8). string.byte(s,i) 返回字符串s的第i个字符的Ascii值,如果没有第⼆个参数,缺省返回第⼀个字符的Ascii值。
复制代码代码如下:print(string.byte("abc")) --输出97print(string.byte("abc",-1)) --输出99由于字符串类型的变量都是不可变类型的变量,因此在所有和string相关的函数中,都⽆法改变参数中的字符串值,⽽是⽣成⼀个新值返回。
2. 模式匹配函数:Lua的字符串库提供了⼀组强⼤的模式匹配函数,如find、match、gsub和gmatch。
Lua极简入门指南(一):基础知识篇
Lua极简⼊门指南(⼀):基础知识篇本⽂是《Programming in Lua 3rd》读书笔记。
Chunks⼀个 Chunk 就是⼀组被执⾏的语句,例如⼀个⽂件或者交互模式下的⼀⾏。
标识符(identifiers)我们应该避免使⽤以 _ 开头并跟上⼀个或者多个⼤写字母的字符串来作标识符,它们被保留作特殊的⽤途(例如:_VERSION)。
注释单⾏注释使⽤复制代码代码如下:--多⾏注释使⽤复制代码代码如下:--[[ 和 --]]类型简介Lua 存在的数据类型包括:1.nil。
此类型只有⼀个值 nil。
⽤于表⽰“空”值。
全局变量默认为 nil,删除⼀个已经赋值的全局变量只需要将其赋值为 nil(对⽐ JavaScript,赋值 null 并不能完全删除对象的属性,属性还存在,值为 null)2.boolean。
此类型有两个值 true 和 false。
在 Lua 中,false 和 nil 都表⽰条件假,其他值都表⽰条件真(区别于 C/C++ 等语⾔的是,0 是真)3.number。
双精浮点数(IEEE 754 标准),Lua 没有整数类型4.string。
你可以保存任意的⼆进制数据到字符串中(包括 0)。
字符串中的字符是不可以改变的(需要改变时,你只能创建⼀个新的字符串)。
获取字符串的长度,可以使⽤ # 操作符(长度操作符)。
例如:print(#”hello”)。
字符串可以使⽤单引号,也可以使⽤双引号包裹,对于多⾏的字符串还可以使⽤ [[ 和 ]] 包裹。
字符串中可以使⽤转义字符,例如 \n \r 等。
使⽤ [[ 和 ]]包裹的字符串中的转义字符不会被转义erdata。
⽤于保存任意的 C 数据。
userdata 只能⽀持赋值操作和⽐较测试6.function。
函数是第⼀类值(first-class value),我们能够像使⽤其他变量⼀样的使⽤函数(函数能够保存在变量中,可以作为参数传递给函数)7.thread。
Lua脚本语言简明教程
' single quote
[ left square bracket
] right square bracket
第十节:变量的定义
由于这种字符串只能写在一行中,因此,不可避免的要用到转义字符。加入了转义字符的串 ,看起来实在是不敢恭维,比如:
"one linennext linen"in quotes", 'in quotes'"
在Lua中,只有false和nil为false,其它任何数据都计算为true,0
也是true!
and 和 or的运算结果不是true和false,而是和它的两个操作数相
关。
a and b:如果a为false,则返回a;否则返回b
a or b:如果 a 为true,则返回a;否则返回b
举几个例子:
print(4 and 5) --> 5
[[a text between double brackets]]
</BODY>
</HTML>
]]
值得注意的是,在这种字符串中,如果含有单独使用的"[["或"]]"就仍然得用"["或"]"来避免歧 义。当然,这种情况是极少会发生的。
第十节:变量的定义
Table
关系表类型,这是一个很强大的类型
。相等表示两个变量引用的是同一个数据。比如:
a={1,2}
b=a
print(a==b, a~=b) -- true, false
a={1,2}
b={1,2}
print(a==b, a~=b) -- false, true
Lua脚本语言基础教程ppt课件
• 当表的索引是字符串的时候,我们可以简 写成:
T1.John={} T1.John.Age=27 T1.John.Gender=“Male“ 或 T1.John{Age=27, Gender="Male"}
Table注意点
• 所有元素之间,总是用逗号","隔开; • 所有索引值都需要用"["和"]"括起来;如果
是字符串,还可以去掉引号和中括号; • 如果不写索引,则索引就会被认为是数字,
并按顺序自动从1往后编;
• 表类型可以拥有任意类型的值,包括函数
t= { Age = 27 add = function(self, n) self.Age = self.Age+n end }
print(t.Age) -- 27 t.add(t, 10) print(t.Age) -- 37
Waldemar Celes
History • “SOL” – Simple Object Language, c. 1993 • PUC-Rio and Tecgraf • Petrobras • Major influences: SNOBOL, Icon, AWK, Bibtex, Scheme
关系表型,个型功能比大,参考后面的内容。
Function 函数型 ,函数也是一种型 ,所有的函数,它本身就是一个量。
Userdata
个 型用来和 Lua的宿主打交道的。宿主通常是用C和C++来写的,在种情况下, Userdata可以是宿主的任意数据型 ,常用的有Struct和指。
Luiz Henrique de Figueiredo
LUA在游戏开发中做什么?
Lua教程(二十二):userdata
Lua教程(⼆⼗⼆):userdata在Lua中可以通过⾃定义类型的⽅式与C语⾔代码更⾼效、更灵活的交互。
这⾥我们通过⼀个简单完整的⽰例来学习⼀下Lua 中userdata的使⽤⽅式。
需要说明的是,该⽰例完全来⾃于Programming in Lua。
其功能是⽤C程序实现⼀个Lua的布尔数组,以提供程序的执⾏效率。
见下⾯的代码和关键性注释。
复制代码代码如下:#include <lua.hpp>#include <lauxlib.h>#include <lualib.h>#include <limits.h>#define BITS_PER_WORD (CHAR_BIT * sizeof(int))#define I_WORD(i) ((unsigned int)(i))/BITS_PER_WORD#define I_BIT(i) (1 << ((unsigned int)(i)%BITS_PER_WORD))typedef struct NumArray {int size;unsigned int values[1];} NumArray;extern "C" int newArray(lua_State* L){//1. 检查第⼀个参数是否为整型。
以及该参数的值是否⼤于等于1.int n = luaL_checkint(L,1);luaL_argcheck(L, n >= 1, 1, "invalid size.");size_t nbytes = sizeof(NumArray) + I_WORD(n - 1) * sizeof(int);//2. 参数表⽰Lua为userdata分配的字节数。
同时将分配后的userdata对象压⼊栈中。
NumArray* a = (NumArray*)lua_newuserdata(L,nbytes);a->size = n;for (int i = 0; i < I_WORD(n - 1); ++i)a->values[i] = 0;//获取注册表变量myarray,该key的值为metatable。
Lua教程(一):在C++中嵌入Lua脚本
Lua教程(⼀):在C++中嵌⼊Lua脚本本系列教程主要介绍如何在C/C++程序⾥⾯嵌⼊Lua脚本,我打算从以下⼏个⽅⾯来介绍:1.如何在C/C++⾥⾯嵌⼊Lua脚本2.Lua访问C/C++数据结构(这⾥⾯要介绍类,结构体,函数,变量,枚举等数据类型在lua⾥⾯如何访问)3.C/C++访问Lua的数据,主要是基本数据类型,函数和Table4.Cocos2D-X⾥⾯的Lua绑定(含⾃动绑定与⼿动绑定)5.Cocos2D-x⾥⾯Lua和C/C++相互调⽤6.Cocos2D-x⾥⾯Lua和Java相互调⽤7.Cocos2D-x⾥⾯Lua和Objective-C相互调⽤本系列教程不会过多地介绍Lua的基本语法,关于Lua基本语法的学习,推荐《Programming In Lua》。
如有纰漏,欢迎指出,谢谢。
另外,关于更新时间,每周⼀篇,定期或者不定期,呵呵。
Mac项⽬集成Lua准备⼯作⾸先,新建⼀个控制台应⽤程序。
打开Xcode,New->Project->OSX->Command Line Tool,取名为Lesson01如下图所⽰:接下来,我们需要下载lua5.2.3.下载完后,解压缩,然后cd到刚刚解压缩的路径下⾯,输⼊make macosx,这样便可以⽣成Mac下⾯的lib⽂件。
接下来把刚刚解压缩的⽂件夹拷贝到你新建的⼯程下⾯,然后设置include路径和library路径。
(注意,这⾥是不需要把头⽂件添加到Xcode⾥⾯的,只要指定include路径,编译的时候,编译器会⾃动去找的。
)因为我的Lua⽂件夹的路径是:xxxx/Lesson01/lua-5.2.3,所以,我把search path和library path分别设置为:复制代码代码如下://search path$(SRCROOT)/Lesson01/lua-5.2.3/src///library path$(PROJECT_DIR)/Lesson01下⾯是我的⼯程与lua之间的⽬录结构,liblua.a⽂件是从src⾥⾯拷贝出来的。
lua语言零基础教程
lua语言零基础教程Lua语言零基础教程:Lua是一种功能强大的脚本编程语言,主要用于扩展和嵌入其他应用程序中。
它具有简单易学、轻量级的特点,常被用于游戏开发、网络编程以及嵌入式设备上。
1. 安装Lua:首先,你需要下载并安装Lua解释器。
你可以在Lua官方网站上找到适合你操作系统的安装程序。
安装完成后,你可以在命令行中运行"lua"命令来启动Lua解释器。
2. 基本语法:Lua的语法非常简洁和易懂。
以下是一些基本的语法规则:- 注释:使用"--"来添加单行注释。
例如:-- 这是一个注释。
- 变量:Lua中的变量是全局的,并且无需事先声明类型。
你可以直接对变量赋值。
例如:x = 10。
- 数据类型:Lua支持多种数据类型,包括数字、字符串、布尔值、表、函数等。
例如:x = 10;str = "Hello World";flag = true。
- 循环和条件语句:Lua中的循环和条件语句与其他编程语言类似。
你可以使用"if"语句来进行条件判断,使用"for"和"while"语句来进行循环操作。
- 函数:Lua中的函数定义使用关键字"function",你可以定义自己的函数,并在程序中进行调用。
3. 基本操作:Lua提供了一些基本的操作符,包括算术运算符、比较运算符和逻辑运算符等。
你可以使用这些操作符对变量进行计算和比较。
4. 表(Table):Lua中的表相当于其他编程语言中的数组或字典。
你可以使用表来存储和操作数据。
表可以包含多个键值对,可以根据键来获取对应的值。
5. 文件操作:Lua提供了一些函数用于文件的读写操作。
你可以使用这些函数来读取文件内容、写入文件或者对文件进行其他操作。
这只是Lua语言的一些基础知识,希望能对你入门Lua编程有所帮助。
如果你对Lua感兴趣,可以进一步学习Lua的高级特性和应用。
Lua语言新手简单入门教程
Lua语⾔新⼿简单⼊门教程⼀、前⾔Lua 是⼀种轻量⼩巧的脚本语⾔,⽤标准 C 语⾔编写并以源代码形式开放,其设计⽬的是为了嵌⼊应⽤程序中,从⽽为应⽤程序提供灵活的扩展和定制功能。
Lua 可以应⽤在游戏开发、独⽴应⽤脚本、Web 应⽤脚本、扩展和数据库插件、安全系统等场景。
笔者学习的⽬的主要是为了能在 Web 应⽤(Nginx、Redis)中使⽤到 Lua 脚本。
特点Lua脚本可以很容易的被C/C++ 代码调⽤,也可以反过来调⽤C/C++的函数。
Lua由标准C编写⽽成,代码简洁优美,⼏乎在所有操作系统和平台上都可以编译,运⾏。
以极⼩的体积和简单的语法提供全⾯的功能。
[⼀个完整的Lua解释器不过200k,在⽬前所有脚本引擎中,Lua的速度是最快的]实现与宿主语⾔的简洁接⼝成为⼀个很容易嵌⼊其它语⾔中使⽤的语⾔。
特性⽀持⾯向对象编程轻量级可扩展函数式编程⾃动内存管理通⽤类型的表–table,可实现数组,哈希表,集合,对象⽀持闭包⽀持多线程⽀持交互式编程⼆、安装注意:请确保安装 Lua 之前系统已安装 readline 和 readline-devel。
如果没有则键⼊yum install -y readline readline-devel 进⾏安装。
curl -R -O /ftp/lua-5.3.4.tar.gztar zxf lua-5.3.4.tar.gzcd lua-5.3.4make linux test测试,命令⾏中键⼊ lua -v:Lua 5.1.4 Copyright (C) 1994-2008 , PUC-Rio显⽰ Lua 版本说明安装正确。
三、运⾏⽅式与其他脚本语⾔⼀样,我们需要将 Lua 代码编写在⽂件中,后缀名为 .lua。
运⾏该⽂件的代码时,只需在命令⾏键⼊ lua xx.lua 即可。
四、语法4.1 数据类型Lua 中包含 8 种基本数据类型,即:nil、boolean、number、string、userdata、function、thread 和 table。
初步LUA语言学习教程
初步LUA语言学习教程LUA是一种轻量级的脚本编程语言,最初是为游戏开发而设计的。
它具有简单易学、可嵌入、高效性和可扩展性的特点,因此在各种领域都有广泛的应用,包括游戏开发、网页编程、嵌入式系统等。
本教程旨在帮助初学者快速入门LUA语言的基本语法和常用功能。
以下是一个简单的LUA程序的例子:```lua-- 打印Hello Worldprint("Hello World")```以上代码使用print函数将字符串"Hello World"打印到控制台。
在LUA中,使用双横线(--)表示单行注释。
LUA语言的基本数据类型包括nil、boolean、number、string、table、function和userdata。
下面是一些常见类型的示例:```lua-- nil类型local a = nil-- boolean类型local b = true-- number类型local c = 123-- string类型local d = "hello"-- table类型local e = {1, 2, 3}-- function类型local f = functionprint("This is a function")end-- userdata类型local g = io.open("file.txt", "r")```在LUA中,变量的定义使用关键字local。
LUA的变量是动态类型的,可以在需要时进行类型的切换。
LUA中的流程控制语句包括if语句、for循环、while循环和repeat...until循环。
下面是一个if语句和for循环的例子:```lua-- if语句local num = 10if num > 0 thenprint("num is positive")elseif num < 0 thenprint("num is negative")elseprint("num is zero")end-- for循环for i = 1, 5 doprint(i)end```在LUA中,数组和字典都可以用table来表示。
MoonScript官方文档–LUA教程
MoonScript官方文档–LUA教程MoonScript官方文档我本人写的中文版的MoonScript文档,直接看官方文档其实,还是会不得要领。
后面的英文部分,就是官方的,前面是中文自己写的。
国内用MoonScript的用户相对比较少,作者leafo创作了moonscript,另外还用moonscript创作的一个lua web框架:lapis。
估计moonscript想在国内普及还需要一段路要走。
Coffescript是一种中间的脚本,可以把这种脚本翻译成JavaScript。
而MoonScript,是可以翻译成lua语言的中间脚本。
本文简单的介绍的:1.如何在VIM中,实现MoonScript语法高亮。
2.如何简单的编译MoonScript脚本。
1.安装MoonScriptsudo luarocks install moonscript2.创建.moon源文件 # app.moonlapis = require "lapis"class extends lapis.Application"/": =>"Welcome to Lapis #{require "lapis.version"}!"3.安装MoonScript语法高亮的插件。
# **3-1.下载vim的bundle插件管理程序。
git clone VundleVim/Vundle.vim ~/.vim/bundle/vundle3-2.创建.vimrc配置文件。
vim ~/.vimrc3-3. 编辑.vimrc文件内容。
set nocompatible filetype off set rtp+=~/.vim/bundle/vundle/call vundle#rc() Bundle 'leafo/moonscript-vim' syntax enable3-4.进入VIM,安装bundle插件。
初步LUA语言学习教程
初步LUA语言学习教程LUA是一种简单而强大的脚本语言,被广泛用于游戏开发、网络编程和嵌入式系统等领域。
它的设计目标是提供一种易于学习和使用的脚本语言,并且具有高效执行和灵活的扩展性。
一、LUA语言的基本概念1.变量:在LUA中,变量不需要显式声明,可以直接使用。
变量名以字母开头,可以包含字母、数字和下划线。
2. 数据类型:LUA支持多种数据类型,包括数值型、字符串、布尔型、nil(空值)和table(表)。
其中,table是LUA中的一种基本的数据结构,用于存储多个键值对。
3. 控制结构:LUA提供了常见的控制结构,如if语句、for循环和while循环。
它们的语法和其他编程语言类似。
4. 函数:在LUA中,函数是一种可以重复使用的代码块。
可以使用function关键字定义函数,并通过参数和返回值来传递数据。
二、LUA的基本语法1.注释:在LUA中,使用"--"来表示单行注释,使用"--[[--]]"来表示多行注释。
2.变量赋值:可以使用"="来给变量赋值,也可以一次给多个变量赋值。
```a=10b = "hello"c,d=20,30```3.字符串:在LUA中,字符串可以用单引号或双引号括起来。
```str1 = 'hello'str2 = "world"```4.数值操作:LUA支持常见的数值操作,如加(+)、减(-)、乘(*)、除(/)和取余(%)。
5. 条件判断:可以使用if语句来进行条件判断。
```if a == 10 thenprint("a is equal to 10")elseprint("a is not equal to 10")end```6. 循环:LUA提供了for循环和while循环。
```for i = 1, 10 doprint(i)endi=1while i <= 10 doprint(i)i=i+1end```7. 函数定义和调用:可以使用function关键字来定义函数,并使用函数名和参数来调用函数。
Lua脚本语言简明入门教程
Lua脚本语⾔简明⼊门教程这⼏天系统地学习了⼀下Lua这个脚本语⾔,Lua脚本是⼀个很轻量级的脚本,也是号称性能最⾼的脚本,⽤在很多需要性能的地⽅,⽐如:游戏脚本,nginx,wireshark的脚本,当你把他的源码下下来编译后,你会发现解释器居然不到200k,这是多么地变态啊(/bin/sh都要1M,MacOS平台),⽽且能和C语⾔⾮常好的互动。
我很好奇得浏览了⼀下Lua解释器的源码,这可能是我看过最⼲净的C的源码了。
我不想写⼀篇⼤⽽全的语⾔⼿册,⼀⽅⾯是因为已经有了(见本⽂后⾯的链接),重要的原因是,因为⼤篇幅的⽂章会挫败⼈的学习热情,我始终觉得好的⽂章读起来就像拉⼤便⼀样,能⼀⼝⽓很流畅地搞完,才会让⼈爽(这也是我为什么不想写书的原因)。
所以,这必然⼜是⼀篇“⼊厕⽂章”,还是那句话,我希望本⽂能够让⼤家利⽤上下班,上厕所⼤便的时间学习⼀个技术。
呵呵。
相信你现在已经在厕所⾥脱掉裤⼦露出屁股已经准备好⼤便了,那就让我们畅快地排泄吧……运⾏⾸先,我们需要知道,Lua是类C的,所以,他是⼤⼩写字符敏感的。
下⾯是Lua的Hello World。
注意:Lua脚本的语句的分号是可选的,这个和GO语⾔很类似。
复制代码代码如下:print("Hello World")你可以像python⼀样,在命令⾏上运⾏lua命令后进⼊lua的shell中执⾏语句。
复制代码代码如下:chenhao-air:lua chenhao$ luaLua 5.2.2 Copyright (C) 1994-2013 , PUC-Rio> print("Hello, World")Hello, World>也可以把脚本存成⼀个⽂件,⽤如下命令⾏来运⾏。
复制代码代码如下:>lua file.lua或是像shell⼀样运⾏:复制代码代码如下:chenhao-air:lua chenhao$ cat hello.lua#!/usr/local/bin/luaprint("Hello, World")chenhao-air:lua chenhao$ chmod +x hello.luachenhao-air:test chenhao$ ./hello.luaHello, World语法注释复制代码代码如下:-- 两个减号是⾏注释--[[这是块注释这是块注释--]]变量Lua的数字只有double型,64bits,你不必担⼼Lua处理浮点数会慢(除⾮⼤于100,000,000,000,000),或是会有精度问题。
lua简单入门
lua简单⼊门⼀、安装windows下的lua环境,luaforwindows下载最新的5.3版本,下载地址:也可以在gitlab下载:下载解压lua53.exe就是lua语⾔解释器按住shift⿏标右键,此处打开命令窗⼝编写⼀个简单的hello world程序test.lua如果觉得简单,可以给⼀个for循环,打印1~10正常执⾏,说明lua环境安装没有问题⼆.lua语⾔的基本语法1. lua的值和类型数值:1,2,31.2 3.14字符类型"hello world"Table类型--lua的table,不需要预定义长度,保证数组在⾸次赋值的时候在最⼤索引加1--没有类型限制--下标从1开始,⾃动扩容--table = 数组+映射--第⼀种写法a={}a[1]=10a[2]=20a[3]="hello"print(a[1],a[2],a[3])a={10,20,"hello"}print(a[1],a[2],a[3])-- 映射的另外写法a = {}a["hello"]=2a[3]=falseprint(a.hello, a[3])--别的写法a={["hello"]=2,[3]=false,}print(a.hello,a[3])1. lua的函数-- 加法函数function add(a,b)return a+b end--调⽤函数print(add(1,2))--调⽤函数不同的写法function add(a,b)return a+b enda = add(1,2)print(a)add = function(a,b)return a+bendfoo =addprint(foo(1,2))--函数返回多个值,返回加法和减法function add(a,b)return a+b,a-bendprint(add(1,2))1. lua中多变量的赋值a,b = 1,2print(a,b)--交换变量a,b = b,a-- 默认值为nila,b = 1-- 多余的值会忽略a,b = 1,2,31. lua的表达式a= 1 + 1print(a)a=1b=2print((b+2)*3)c = 1c = c + 1print(c)5. lua的逻辑表达式--and 两个都为true,返回true,否则返回false--or 任意⼀个为true,返回true--not 取反print(true and false)6. lua拼接字符串,使⽤两个点号 ..print("hello".." world")7. --lua变量的范围-- 全局变量function foo()a = 1 -- 全局变量endfoo()print(a) -- 为1-- 局部变量⼀般使⽤local关键字修饰,我们在lua开发中应该尽量使⽤local局部变量function foo()local a = 1 -- 局部变量,local为作⽤域控制关键词,分隔开,利于阅读,还有优化作⽤endfoo()print(a) -- 为nil8. lua的流程控制,判断和循环-- ⽼段⼦:⽼婆,包⼦和西⽠-- ⽼婆打电话给程序员⽼公打了个电话:下班顺路买⼀⽄包⼦回来,如果看到卖西⽠的就买⼀个-- 当天晚上回来程序员带回来⼀个包⼦,⽼婆怒道:你怎么就买了⼀个包⼦,程序员:因为我看到了卖西⽠的啊-- 当看到卖西⽠的就买⼀个包⼦,没有看到卖西⽠的就买1公⽄包⼦if foundWatermelon() thenbuy("baozi","1")elsebuy("baozi","1kg")enda.while循环,循环打印0-9local i = 0while i < 10 doprint(i)i = i + 1end--lua的for数值遍历--for (int i = 0;i < 10; i ++)--{-- printf("%d\n",i);--}--打印1到10for i = 1,10 doprint(i)end--等价于for i = 1,10,1 doprint(i)end-- 倒叙打印for i = 10,1,-1 doprint(i)endb. lua的for泛型遍历for的泛型遍历: pairs() ipairs() 迭代器-- pairs是内部的函数,功能就是可以把⼀个table⾥⾯的所有部分全部遍历a= {["foo"]=1,[100]=true,[1]=20,[2]=30,}for k,v in pairs(a) doprint(k,v)end-- ipairs 功能变化了,只遍历数组部分a= {["foo"]=1,[100]=true,[1]=20,[2]=30,}for k,v in ipairs(a) doprint(k,v)end三、lua的包管理-- lua的包(package)local c = require("foo") -- 作为⽂件名搜索,默认搜索当前⽬录print(c)print(c.foo(1,2))-- foo.lua 的代码local class={}function class.foo(a,b)return a + bend-- 另外的写法,class的映射:class.foo,foo键的值为⼀个函数--class.foo = function (a,b)-- return a + b--end-- lua的⼀个特点,可以把全局代码当做⼀个值返回return class-- 美化后local socket = require("foo") -- 作为⽂件名搜索,默认搜索当前⽬录print(socket)print(socket.send(1,2))-- fooo.lualocal class={}function class.send(a,b)return a + bend-- 另外的写法,class的映射:class.foo,foo键的值为⼀个函数--class.foo = function (a,b)-- return a + b--end-- lua的⼀个特点,可以把全局代码当做⼀个值返回return class-- require 加载⽂件,运⾏,推荐使⽤-- dofile --加载并运⾏,可以多次加载,⽼的写法-- lua从5.3 以后没有dostring功能了print("require")for i = 1,2 doprint(require("foo"))endfor i = 1,2 doprint(dofile("foo.lua"))end-- 运⾏结果E:\software\lua5.3>lua53.exe test.lua requiretable: 008182a8 -- table相同,表⽰同⼀个table: 008182a8dofiletable: 00817c68table: 0081e350lua的系统库-- 批量插⼊table键值local t = {}for i = 1,10 dotable.insert(t,i)endfor k,v in pairs(t) doprint(k, v)endprint(t)-- 删除数组中的元素table.remove(t,2)-- 循环打印table 结果:for k,v in pairs(table) doprint(k, v)endE:\software\lua5.3>lua53.exe test.luamove function: 69e96240sort function: 69e96ee0insert function: 69e96720remove function: 69e96550concat function: 69e96890unpack function: 69e95e30pack function: 69e95fa0--删除元素的另外写法local t = {}t.a = 1t.b = 2-- 删除⼀个值t.a = nilfor k,v in pairs(t) doprint(k, v)end获取lua中对象的长度-- # 可以获取对象的长度,对象⼀般指的就是字符串和tablelocal t = {5, 1 ,3 ,4, 12}local s = "hello world"-- 得到table的长度print(#t)-- 取字符串的长度print(#s)-- type获取类型print(type(s))-- 字符转换为数字local a = tonumber("3.14")-- 数字转换为数字local b = tostring(3.14)print(b, type(b))-- string.format 把⼀个字符串按照格式构造出来print(string.format("hi %d", 20))总结:。
lua游戏脚本零基础教程
lua游戏脚本零基础教程Lua是一个轻量级的脚本语言,用于嵌入其他程序中使用。
它被广泛应用于游戏开发中,特别是作为游戏的脚本语言。
如果你对Lua游戏脚本还没有任何经验,那么这篇教程将帮助你入门。
首先,你需要了解Lua的基本语法。
Lua使用类似C语言的语法,所以如果你对C语言或其他类似的语言有所了解,学习Lua将相对容易。
下面是一些Lua基本语法的示例:1. 变量和赋值:```lualocal playerName = "Bob"local playerHealth = 100```2. 控制流语句:```luaif playerHealth > 0 thenprint(playerName .. " is alive!")elseprint(playerName .. " is dead.")end```3. 循环语句:```luafor i = 1, 10 doprint(i)end```4. 函数定义和调用:```luafunction add(a, b)return a + bendprint(add(5, 3)) -- 输出: 8```在游戏中,你会经常用到Lua的表(table)数据结构。
表是一种关联数组,可以用来存储和访问数据。
下面是一个简单的表示角色属性的例子:```lualocal player = {name = "Alice",health = 100,level = 1}```你可以通过使用点(.)操作符或方括号([])来访问表中的数据:```luaprint() -- 输出: Alice```除了基本语法,你还需要掌握一些Lua的常用函数和库。
这些函数和库可以帮助你处理游戏中的各种任务,如文件操作、字符串处理、数学运算等。
下面是一些常用的Lua库示例:1. 文件操作(io库):```lualocal file = io.open("filename.txt", "r")local content = file:read("*a")file:close()```2. 字符串处理:```lualocal string1 = "Hello"local string2 = "World"local combined = string1 .. " " .. string2print(combined) -- 输出: Hello World```3. 数学运算:```lualocal x = math.sin(3.14)print(x) -- 输出: 0.0016```除了这些基本的语法和函数,你还可以使用Lua的用户自定义模块和面向对象编程来更方便地组织和管理你的游戏脚本。
lua 文本用法
lua 文本用法Lua 是一种轻量级的脚本语言,常用于嵌入到应用程序中。
在 Lua 中,文本处理通常涉及字符串操作。
以下是一些常用的 Lua 文本用法:1、字符串连接:使用 .. 运算符可以将两个字符串连接起来。
lualocal str1 = "Hello"local str2 = "World"local result = str1 .. " " .. str2print(result) -- 输出 "Hello World"2、字符串长度:使用 # 运算符可以获取字符串的长度。
lualocal str = "Hello"local length = #strprint(length) -- 输出 53、字符串截取:使用 sub 函数可以从字符串中截取子串。
lualocal str = "Hello World"local subStr = str:sub(1, 5) -- 从第1个字符开始,截取长度为5的子串print(subStr) -- 输出 "Hello"4、字符串替换:使用 gsub 函数可以替换字符串中的所有匹配项。
lualocal str = "Hello World"local newStr = str:gsub("World", "Lua")print(newStr) -- 输出 "Hello Lua"5、字符串大小写转换:使用 lower 和 upper 函数可以将字符串转换为小写或大写。
lualocal str = "Hello World"local lowerStr = str:lower()local upperStr = str:upper()print(lowerStr) -- 输出 "hello world"print(upperStr) -- 输出 "HELLO WORLD"这些是 Lua 中一些常见的文本用法。
LUA基本3D教程
LUA基本3D教程LUA是一种通用的、轻量级的、高效的脚本语言,广泛应用于游戏开发和嵌入式系统中。
在LUA中,我们可以使用其内置的库和功能来实现3D图形的绘制和渲染。
本教程将介绍LUA中基本的3D图形绘制和渲染的实现方法。
一、引入库和初始化要在LUA中进行3D图形绘制和渲染,首先需要引入相关的库文件。
在LUA中,可以使用openGL或者three.lua库来实现3D图形的绘制和渲染。
在本教程中,我们将使用three.lua库来进行演示。
首先,在你的LUA项目文件中引入three.lua库文件。
然后,创建一个场景(scene)和一个相机(camera),并设置相机的位置和朝向。
```lualocal THREE = require("three")--创建一个场景local scene = THREE.Scene--创建一个相机local camera = THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)--设置相机的位置和朝向camera.position.z = 5```二、创建几何体和材质在LUA中,可以使用three.lua库的内置函数来创建各种几何体和材质。
在本教程中,我们将创建一个立方体和一个球体,并给它们分别添加一个基本的材质。
```lua--创建一个立方体local geometry = THREE.BoxGeometry(1, 1, 1)--创建一个材质local material = THREE.MeshBasicMaterial({color = 0x00ff00}) -- 使用几何体和材质创建一个网格(mesh)local cube = THREE.Mesh(geometry, material)--将网格添加到场景中scene.add(cube)--创建一个球体local geometry2 = THREE.SphereGeometry(0.5, 32, 32)local material2 = THREE.MeshBasicMaterial({color = 0xff0000}) local sphere = THREE.Mesh(geometry2, material2)sphere.position.x = 2scene.add(sphere)```三、渲染场景和相机在LUA中,可以使用three.lua库的Renderer对象来渲染场景和相机。
lua 函数调用
lua 函数调用Lua函数调用:Lua是一种轻量级的脚本语言,它具有简单、高效、可扩展等特点。
在Lua中,函数是一等公民,即函数可以像变量一样进行传递和使用。
本文将介绍如何定义和调用Lua函数。
一、定义函数在Lua中,定义一个函数需要使用关键字function,语法格式如下:function function_name (parameters)statementsreturn valuesend其中,function_name为函数名;parameters为参数列表;statements为函数体;values为返回值。
例如,下面的代码定义了一个计算两个数之和的函数add:function add(a, b)return a + bend二、调用函数在Lua中,调用一个函数非常简单,只需要使用函数名加上参数列表即可。
例如,调用上面定义的add函数可以这样写:result = add(1, 2)其中1和2是add函数的两个参数,result是add函数返回的结果。
三、多返回值与其他编程语言不同的是,在Lua中一个函数可以返回多个值。
例如下面这个例子:function swap(a, b)return b, aend这个swap函数接受两个参数a和b,并将它们交换后返回。
调用该函数时可以同时接收两个返回值:x, y = swap(1, 2)此时变量x的值为2,变量y的值为1。
四、匿名函数除了普通的命名式函数外,Lua还支持匿名函数。
匿名函数没有函数名,可以直接赋值给变量或作为其他函数的参数传递。
例如:function test(func)func()endtest(function() print("hello, world") end)在上面的代码中,test函数接受一个参数func,该参数是一个匿名函数。
在调用test时,将一个匿名函数作为参数传递给它。
五、闭包闭包是一种特殊的函数,它可以访问其定义时所在的环境。
lua菜鸟教程
lua菜鸟教程Lua 是一种轻量级的脚本语言,常用于嵌入到其他应用程序中,添加自定义的功能和扩展性。
下面是一些 Lua 的基本概念和语法:1. 数据类型:- nil:表示空值。
- boolean: 布尔类型,只有 true 和 false 两个取值。
- number: 表示实数,Lua 不区分整数和浮点数。
- string: 字符串类型,用双引号或单引号包裹起来。
- function: 函数类型,可以被赋值给变量和作为参数传递。
- userdata: 表示一种用户自定义的数据类型。
- thread: 表示独立执行的线程。
- table: 表示关联数组,是 Lua 中唯一的数据结构。
2. 基本语法:- 注释: 使用双连字符 "--" 开头,可以单行注释,也可以在行末添加注释。
- 变量: 用于存储不同类型的数据。
- 运算符: 包括算术运算符、关系运算符、逻辑运算符等。
- 条件语句: 包括 if 语句和 switch 语句。
- 循环语句: 包括 while 循环、repeat...until 循环和 for 循环。
- 函数: 使用 function 关键字定义函数,并通过函数名调用。
- 模块: 用于组织代码,提供代码的复用性和封装性。
- 文件操作: 包括读取文件内容、写入文件内容等操作。
3. 标准库:- io 库: 用于文件操作。
- string 库: 用于处理字符串。
- math 库: 提供数学函数。
- table 库: 用于操作 Lua 中的表。
- os 库: 提供与操作系统相关的功能。
通过学习这些基本知识,可以开始编写简单的 Lua 程序。
希望这些内容能够帮助你入门 Lua 编程!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Lua脚本语法说明(修订)Posted on 2006-08-04 11:39 沐枫阅读(3512) 评论(9)编辑收藏引用网摘所属分类: C++Lua脚本语法说明(增加lua5.1部份特性)Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。
所以,我只简单的归纳一下Lua的一些语法规则,使用起来方便好查就可以了。
估计看完了,就懂得怎么写Lua程序了。
在Lua中,一切都是变量,除了关键字。
I. 首先是注释写一个程序,总是少不了注释的。
在Lua中,你可以使用单行注释和多行注释。
单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。
相当于C++语言中的"//"。
多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。
这种注释相当于C语言中的"/*...*/"。
在注释当中,"[["和"]]"是可以嵌套的(在lua5.1中,中括号中间是可以加若干个"="号的,如[==[ ... ]==]),见下面的字符串表示说明。
II. Lua编程经典的"Hello world"的程序总是被用来开始介绍一种语言。
在Lua中,写一个这样的程序很简单:print("Hello world")在Lua中,语句之间可以用分号";"隔开,也可以用空白隔开。
一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。
Lua 有好几种程序控制语句,如:注意一下,for的循环变量总是只作用于for的局部变量;当省略步进值时,for循环会使用1作为步进值。
使用break可以用来中止一个循环。
相对C语言来说,Lua有几个地方是明显不同的,所以面要特别注意一下:.语句块语句块在C中是用"{"和"}"括起来的,在Lua中,它是用do 和 end 括起来的。
比如:do print("Hello") end可以在函数中和语句块中定局部变量。
.赋值语句赋值语句在Lua被强化了。
它可以同时给多个变量赋值。
例如:a,b,c,d=1,2,3,4甚至是:a,b=b,a -- 多么方便的交换变量功能啊。
在默认情况下,变量总是认为是全局的。
假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。
比如:local a,b,c = 1,2,3 -- a,b,c都是局部变量.数值运算和C语言一样,支持+, -, *, /。
但Lua还多了一个"^"。
这表示指数乘方运算。
比如2^3 结果为8, 2^4结果为16。
连接两个字符串,可以用".."运处符。
如:"This a " .. "string." -- 等于"this a string".比较运算所有这些操作符总是返回true或false。
对于Table,Function和Userdat a类型的数据,只有== 和 ~=可以用。
相等表示两个变量引用的是同一个数据。
比如:a={1,2}b=aprint(a==b, a~=b) --输出 true, falsea={1,2}b={1,2}print(a==b, a~=b) --输出 false, true.逻辑运算and, or, not其中,and 和 or 与C语言区别特别大。
在这里,请先记住,在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!and 和 or的运算结果不是true和false,而是和它的两个操作数相关。
a and b:如果a为false,则返回a;否则返回ba or b:如果 a 为t rue,则返回a;否则返回b举几个例子:print(4and5) --输出 5print(nil and13) --输出 nilprint(false and13) --输出 falseprint(4or5) --输出 4print(false or5) --输出 5在Lua中这是很有用的特性,也是比较令人混洧的特性。
我们可以模拟C语言中的语句:x = a? b : c,在Lua中,可以写成:x = a and b or c。
最有用的语句是:x = x or v,它相当于:if not x then x = v end 。
.运算符优先级,从低到高顺序如下:和C语言一样,括号可以改变优先级。
III. 关键字关键字是不能做为变量的。
Lua的关键字不多,就以下几个:IV. 变量类型怎么确定一个变量是什么类型的呢?大家可以用type()函数来检查。
Lua支持的类型有以下几种:V. 变量的定义所有的语言,都要用到变量。
在Lua 中,不管在什么地方使用变量,都不需要声明,并且所有的这些变量总是全局变量,除非我们在前面加上"local"。
这一点要特别注意,因为我们可能想在函数里使用局部变量,却忘了用local来说明。
至于变量名字,它是大小写相关的。
也就是说,A 和a 是两个不同的变量。
定义一个变量的方法就是赋值。
"="操作就是用来赋值的 我们一起来定义几种常用类型的变量吧。
A. Nil正如前面所说的,没有使用过的变量的值,都是Nil 。
有时候我们也需要将一个变量清除,这时候,我们可以直接给变量赋以nil 值。
如:var1=nil -- 请注意 nil 一定要小写B. Boolean布尔值通常是用在进行条件判断的时候。
布尔值有两种:true 和 false 。
在Lua 中,只有false 和nil 才被计算为false ,而所有任何其它类型的值,都是true 。
比如0,空串等等,都是true 。
不要被 C 语言的习惯所误导,0在Lua 中的的确确是true 。
你也可以直接给一个变量赋以Boolean 类型的值,如:theBoolean = trueC. Number在Lua中,是没有整数类型的,也不需要。
一般情况下,只要数值不是很大(比如不超过100,000,000,000,000),是不会产生舍入误差的。
在WindowsXP能跑的当今主流PC上,实数的运算并不比整数慢。
实数的表示方法,同C语言类似,如:4 0.4 4.57e-3 0.3e12 5e+20D. String字符串,总是一种非常常用的高级类型。
在Lua中,我们可以非常方便的定义很长很长的字符串。
字符串在Lua中有几种方法来表示,最通用的方法,是用双引号或单引号来括起一个字符串的,如:"That's go!"或'Hello world!'和C语言相同的,它支持一些转义字符,列表如下:\a bell\b back space\f form feed\n newline\r carriage return\t horizontal t ab\v vertical tab\\ backslash\" double quote\" single quote\[ left square bracket\] right square bracket由于这种字符串只能写在一行中,因此,不可避免的要用到转义字符。
加入了转义字符的串,看起来实在是不敢恭维,比如:"one line\nnext line\n\"in quotes\", "in quotes""一大堆的"\"符号让人看起来很倒胃口。
如果你与我有同感,那么,我们在Lua中,可以用另一种表示方法:用"[["和"]]"将多行的字符串括起来。
(lua5.1: 中括号中间可以加入若干个"="号,如[==[ ... ]==],详见下面示例)示例:下面的语句所表示的是完全相同的字符串:a ='alo\n123"'a ="alo\n123\""a ='\97lo\10\04923"'a =[[alo123"]]a =[==[alo123"]==]值得注意的是,在这种字符串中,如果含有单独使用的"[["或"]]"就仍然得用"\["或"\]"来避免歧义。
当然,这种情况是极少会发生的。
E. Table关系表类型,这是一个很强大的类型。
我们可以把这个类型看作是一个数组。
只是C语言的数组,只能用正整数来作索引;在Lua中,你可以用任意类型来作数组的索引,除了nil。
同样,在C语言中,数组的内容只允许一种类型;在Lua中,你也可以用任意类型的值来作数组的内容,除了nil。
Table的定义很简单,它的主要特征是用"{"和"}"来括起一系列数据元素的。
比如:T1 = {} -- 定义一个空表T1[1]=10-- 然后我们就可以象C语言一样来使用它了。
T1["John"]={Age=27, Gender="Male"}这一句相当于:T1["John"]={} -- 必须先定义成一个表,还记得未定义的变量是nil类型吗T1["John"]["Age"]=27T1["John"]["Gender"]="Male"当表的索引是字符串的时候,我们可以简写成:T1.John={}T1.John.Age=27T1.John.Gender="Male"或T1.John{Age=27, Gender="Male"}这是一个很强的特性。
在定义表的时候,我们可以把所有的数据内容一起写在"{"和"}"之间,这样子是非常方便,而且很好看。
比如,前面的T1的定义,我们可以这么写:T1={10, -- 相当于 [1] = 10[100]=40,John=-- 如果你原意,你还可以写成:["John"] ={Age=27, -- 如果你原意,你还可以写成:["Age"] =27Gender=Male -- 如果你原意,你还可以写成:["Gender"] =Male},20-- 相当于 [2] = 20}看起来很漂亮,不是吗?我们在写的时候,需要注意三点:第一,所有元素之间,总是用逗号","隔开;第二,所有索引值都需要用"["和"]"括起来;如果是字符串,还可以去掉引号和中括号;第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;表类型的构造是如此的方便,以致于常常被人用来代替配置文件。