Lua 快速入门学习教程

2022-12-29 0 858

在这首诗中,我想向我们如是说怎样展开 Lua 流程设计。我假定我们都段小宇最少两门编程词汇,比如说 Basic 或 C,不光是 C。因为Lua 的最小商业用途是在寄主流程中做为JAVA采用的。

Lua 快速入门学习教程

Lua 的句法较为简单,自学出来也较为省心,但机能却并不弱,在 Lua 中,在我看来表达式,除URL。请读懂这句话。

标识符注解

写三个流程,常常免不了注解的,在 Lua 中,你能采用单行线注解和二百一十三注解。

单行线注解中,已连续三个破折号”–“则表示注解的已经开始,始终沿袭到行末年末。相等于 C++词汇中的”//”。二百一十三注解中,由”–[[“则表示注解已经开始,因此始终沿袭到”]]”年末。此种注解相等于 C 词汇中的”/*…*/”。在注解当中,”[[“和 “]]”是能冗余的。

基本上句法

经典之作的”Hello world”的流程常常被用以已经开始如是说一类词汇。在 Lua 中,写三个这种的流程很单纯:

print(“Hello world”)

在 Lua 中,句子间能用王劝”;”分隔,也能用盲点分隔。一般而言,假如数个句子写在同一个行不然,提议常常用王劝分隔。Lua 有许多种流程掌控句子,如:

前提掌控:if 前提 then … elseif 条件 then … else … endWhile 循环式:while 前提 do … endRepeat 循环式:repeat … until 前提For 循环式:for 表达式= 消费者物价指数,起点值,TNUMBERFK do … endFor 循环式:for 表达式1,表达式2,…,表达式 N in 表或隐式表达式 do … end

不光注意呵呵,for 的循环式表达式常常只促进作用于 for 的局部表达式,你也能略去TNUMBERFK值,这时,for 循环式会采用1做为TNUMBERFK值。你能用 break 来终止三个循环式。

假如你有流程设计的此基础,比如说你段小宇 Basic,C 等等的,你会真的 Lua 也不难。但 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 和Userdata 类型的数据,只有==和~=能用。

相等则表示三个表达式引用的是同三个数据。比如说:

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 为true,则返回a;否则返回b

举几个例子:

print(4 and 5)–>5print(nil and 13)–> nilprint(false and 13)–> falseprint(4 or 5)–>4print(false or 5)–>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 。

运算符优先级

运算符优先级,从高到低顺序如下:

^not -(一元运算)*/+-..(字符串连接)<><=>=~===andor

URL

URL是不能做为表达式的。Lua 的URL不多,就以下几个:

and break do else elseif end false for function ifin local nil not or repeat return then true until while

表达式类型

怎么确定三个表达式是什么类型的呢?我们能用type()表达式来检查。Lua支持的类型有以下几种:

Nil 空值,所有没有采用过的表达式,都是nil。nil 既是值,又是类型。Boolean 布尔值Number 数值,在Lua 里,数值相等于C 词汇的doubleString 字符串,假如你愿意不然,字符串是能包含\0字符的Table 关系表类型,这个类型机能较为强大,我们在后面慢慢说。Function 表达式类型,不要怀疑,表达式也是一类类型,也就是说,所有的表达式,它本身就是三个表达式。Userdata 这个类型专门用以和Lua 的寄主打交道的。寄主通常是用C和C++来编写的,在此种情况下,Userdata 能是寄主的任意数据类型,常用的有Struct 和指针。Thread 线程类型,在Lua 中没有真正的线程。Lua 中能将三个表达式分成几部份运行。假如感兴趣不然,能去看看Lua 的文档。

表达式的定义

所有的词汇,都要用到表达式。在 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 类型的值,如:

varboolean = true

C. Number

在Lua 中,是没有整数类型的,也不需要。一般情况下,只要数值不是很大(比如说不超过100,000,000,000,000),是不会产生舍入误差的。在很多CPU上,实数的运算并不比整数慢。

实数的则表示方法,同C 词汇类似,如:

40.44.57e-30.3e125e+20

D. String

字符串,常常一类非常常用的高级类型。在Lua 中,你能非常方便的定义很长很长的字符串。字符串在Lua 中有几种方法来则表示,最通用的方法,是用双引号或单引号来括起三个字符串的,如:

“This is a string.”

和C 词汇相同的,它支持一些转义字符,列表如下:

\a bell\b back space\f form feed\n newline\r carriage return\t horizontal tab\v vertical tab\\ backslash\” double quote\ single quote\[ left square bracket\] right square bracket

由于此种字符串只能写在一行中,因此,不可避免的要用到转义字符。加入了转义字符的串,看出来实在是不敢恭维,比如说:

“one line\nnext line\n\”in quotes\”,in quotes”

一大堆的”\”符号让人看出来很倒胃口。假如你与我有同感,那么,我们在Lua 中,能用另一类则表示方法:用”[[“和”]]”将二百一十三的字符串括出来,如:

page =[[An HTML PageLua[[a text between double brackets]]]]

值得不光注意的是,在此种字符串中,假如含有单独采用的”[[“或”]]”就仍然得用”\[“或”\]”来避免歧义。当然,此种情况是极少会发生的。

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往后编;

表类型的构造是如此的方便,以致于常常被人用以代替配置文件。是的,不用怀疑,它比ini 文件要漂亮,因此强大的多。

F. Function

表达式在 Lua 中,表达式的定义也很单纯。典型的定义如下:

function add(a,b)– add 是表达式名字,a 和b 是参数名字return a+b — return 用以返回表达式的运行结果end

请不光注意,return 词汇一定要写在end 之前。假如你非要在中间放上一句return,那么请写成:do return end。还记得前面说过,表达式也是表达式类型么,上面的表达式定义,其实相等于:

add = function (a,b) return a+b end

当你重新给add 赋值时,它就不再则表示这个表达式了。你甚至能赋给add 任意数据,包括nil (这种,你就清除add 表达式)。Function 是不是很象C 词汇的表达式指针。

和C 词汇一样,Lua 的表达式能接受可变参数个数,它同样是用”…”来定义的,比如说:

function sum (a,b,…)

假如想取得…所代表的参数,能在表达式中访问arg 局部表达式(表类型)得到。

如sum(1,2,3,4)则,在表达式中,a =1, b =2, arg ={3,4}更可贵的是,它能同时返回数个结果,比如说:

function s()return 1,2,3,4enda,b,c,d = s()–此时,a =1, b =2, c =3, d =4

前面说过,表类型能拥有任意类型的值,包括表达式!因此,有三个很强大的特性是,拥有表达式的表,哦,我想更恰当的应该说是对象吧。Lua 能采用面向对象编程了。举例如下:

t ={ Age =27 add = function(self, n) self.Age = self.Age+n end}print(t.Age)–27t.add(t,10)print(t.Age)–37

不过,t.add(t,10)这一句实在是有点土对,没关系,在Lua 中,你能简写成:

t:add(10)–相等于t.add(t,10)

G. Userdata 和Thread

这三个类型不然题,超出了本文的内容,就不打算细说了。

结束语

接下来,需要用 Lua 解释器,来帮助你理解和实践了。这篇小文只是帮助你大体了解 Lua 的句法。假如你有编程此基础,相信会很快对 Lua 上手了。

就象C 词汇一样,Lua 提供了相当多的标准表达式来增强词汇的机能。采用这些标准表达式,你能很方便的操作各种数据类型,并处理输入输出。有关这方面的信息,你能参考《Programming in Lua 》一书,你能在网络上直接观看电子版,网址为:http://www.lua.org/pil/index.html。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务