探讨LUA基础知识
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章探讨Lua基础知识
Lua语言与您所了解的其他编程语言比较接近,它相对较小。在Lua的设计与发展过程中,Lua从许多不同的语言中得到了灵感,包括Lisp、Scheme、Pascal和C等。
本章内容是对Lua编程语言的一个概述,如果您在这之前已经有Lua或者其他编程语言的使用经验,您可能会希望浏览本章然后选做一些相关的练习。
您可以从中阅读到更多Lua编程语言的相关资料。这个网站有很多参考资料,包括Programing in Lua一书的在线版,这是一部完全关于Lua编程语言的书。
2.1使用Lua解释器
您可以使用第1章已安装的Lua解释器来运行本章的所有例子和习题。
2.1.1运行命令
Lua解释器是交互的,您可以输入命令,并得到回应,就像两个朋友在交谈一样。(默然说话:这让我想起了上初中时使用过的Basic解释器。。。。已逝的年华,不再复还的时光。。。。)对于代码中的错误,您会接收到一个即时的反馈,使您可以通过修正该语言来了解它是如何动作的。
在提示符下输入下面的命令(您只需要输入“>”后面的部分):
>print(“Hello艾泽拉斯!”)
您会看见下面的输出:
Hello艾泽拉斯
>
2.1.2错误信息的理解
在运行命令的时候,偶尔会出现输入错误并从Lua中获得一个错误反馈。错误信息通常是通俗易懂(默然说话:此话针对美国人,对于我们中国人。。。。。。唉,让人爱不起来的英文字母呀。。。。如果你的英语不太好,其实关系并不大,你完全可以通过学习计算机把英语学好——我就是活生生的例子。不要放弃这个一举两得的机会哦!),并且能指出哪里出了问题。在提示符中输入如下命令(注意要故意拼错print这个单词):
>prnit("Hello艾泽拉斯")
得到的响应是一个跟下面差不多的典型的Lua错误信息:
stdin:1:attempt to call global'prnit'(a nil value)
stack traceback:
stdin:1:in main chunk
[C]:?
>
第一行指出错误信息和错误发生的行号(默然说话:就是“stdin:1”,stdin表示你的输入,1就是指第一行——我们也只输入了一行,不是么?)。后面解释了具体的错误原因:你调用了一个并不存在的函数(默然说话:你把函数的名字打错了,计算机当然会认为它不存在)。
剩余的错误信息叫栈跟踪(traceback),如果你用过Java等高级语言,你就知道在一个复杂的程序里面,栈跟踪对于迅速找到错误原因的重要性了。它能指出错误出现在哪里。
2.1.3使用历史信息来做改变
如果你是通过上面的链接获得的Lua解释器WowLua,那么你可以通过上下箭头键来查看最近的命令行历史,也就是你最近在翻译器中打过的命令。
2.1.4退出解释器
在Windows系统中,如果您已经完成解释器里面运行的代码,您可以简单地关闭窗口。当然,你也可以使用Ctrl+Z来退出解释器,只是在按完Ctrl+Z之后,你需要按一次回车,如果你不想按回车,使用Ctrl+C就可以直接退出。
2.2处理数字
把下面的命令输入解释器:
>print(2+2)
您自然会看到系统响应一个4。
2.2.1基本算术运算
表2-1有效的算术运算符
运算在Lua中的表示方法举例
加+>print(4+4)8
减->print(6-10)-8
乘*>print(13*13)169
除/>print(10/2)5
幂^>print(13^2)169
b取模%>print(8%3)1
取负->print(-(4+4))-8
2.2.2科学计数法
当不方便显示一个很大的数时,Lua可以自动地用科学计数法来显示它。运行下面的命令:
>print(10^15)
1e+015
Lua为了将它们显示出来,先将它们转换成科学计数法。您也可以用这种方式来写一个数字,表示一个数的10的几次幂,幂指数为第二个数字(中间的e可以大写也可以小写)。例如:
>print(10^15)
1e+015
>print(1.23456e5)
123456
>print(1.23456*(10^5))
123456
>print(1234e-4)
0.1234
>print(1234*(10^-4))
0.1234
2.2.3十六进制表示法
Lua可以自动地将十六进制表示的数字转换成十进制。十六进制表示以0x开头,后面接着一串有效的十六进制数字(0~F)。
>print(0x1)
1
>print(0xF)
15
>print(0x10)
16
>print(0x10a4)
4260
当编写代码的时候,您可以用这种格式来表示数字,Lua会正确地对它们进行转换。然而,Lua仅以十进制或科学计数法的形式来返回结果,而不管这些数是怎么输入的。
2.2.4理解浮点
Lua系统中的数在内部都是用浮点表示的。一般情况下,这不会有什么问题,但有时却会有一些比较奇特的现象。比如下面这个例子。
>pointTwo=1.2-1.0
>print(pointTwo<0.2)
true
>print(pointTwo)
0.2
在这里,pointTwo是我们声明的一个变量,它存储了1.2-1.0的结果0.2,但由于这个0.2是被计算出来的,所以它会产生误差,而Lua在显示时又会纠正这个误差,所以我们看到了0.2<0.2的结果为true的奇怪现象。
(默然说话:其实这是一个非常普通存在于各种语言中的问题,问题的原因不在于语言本身,而在于计算机对于浮点数运算的方式,这是一个硬件的问题。问题改变了——对,是改变了,而非颠覆——我们以前认为“小数更精确”的看法。在计算机世界中,关于精确的描述,应该是这样:小数更精确,但进行两数的比较时,整数比较的结果会更精确,而非小数。所以我们应该尽力避开比较两个小数的大小,如果要进行小数的比较,必须设置有效数字进行比较,也就是设置一个误差范围,在误差范围内进行比较。)
关于浮点数问题的讨论,下面给出几个中文链接:
/wiki/IEEE_754