第一步
这章和下章两章奠定了基础, 然后你需要学习书中余下的部分. 同样的, 他们包好了大量的资料, 虽然他们仍然很基础. 如果你以前从未编程过, 你将会学到很多新的理念; 如果你是一位有经验的程序员, 你将会看到很多你已经知道的东西. 在后面的例子中, 你会被鼓励去阅读, 但是警告: 包涵在这三章里有一些Lua建立的语块可能有你不熟悉的语言.
这章解释:
算法运算
变量赋值
字符串
true, false, and nil 的值
if 的声明 和 while , for, 和 repeat 循环
数和算法运算:基本解释器用法
Lua解释器 - lua - 是一个可以执行Lua代码程序, 你打字后他立马把你打出来
这就是为什么解释器被使用在这章, 但是它也可以涉及到Lua实现的特殊内部组件 - 更多关于这方面在下章和第10章.
在本节, 你将探索lua的基本用法
加, 减, 乘, 除, 指数
开始一些例子 - 2加2. 使用你的系统shell, 就好像在第一章描述的, 当你达到这里, 键入lua和按下Enter(按下一些键返回). 你应该会看到一些像下面:
Lua 5.1.1 Copyright (C) 1994-2006 Lua.org, PUC-Rio
>
键入lua运行lua解释器, 当它运行时, 它输出它的版本号和版权信息, 然后它输出下面:
>
这是lua提示告诉你它在等待你给它一些事去做.
现在键入下面(黑体是你要键入的部分)
> print(2 + 2)
然后按Enter键. 你应该会看到下面
4
>
Lua出现在圆括号之间, 看到 2 + 2, 和接下来的print命令和输出结果到屏幕. 然后显示另外的提示来告诉你它已经准备为了更多的输入.
Lua可以操作减法, 负数, 小数, 乘法, 除法, 指数, 和这些的组合. 这是一些例子:
> print(2 - 2)
0
> print(-2 + -2)
-4
> print(2.5 + 2.75)
5.25
> print(3 * 3)
9
> print(100 / 4)
25
> print(3 ^ 2)
9
> print(5 * -5 + 1 + 1 + 0.5)
-22.5
和解释器交互
解释器知道如何去回复当你键入的Lua代码包含错误或者不完整. 不久, 你将会键入一些没意义的lua代码. 偶然地, 万一你没有解决这意外, 现在是时候故意去做来看看会发生什么. 键入print (2 ++ 2)然后按Enter. 你将会得到:
> print(2 + + 2)
stdin:1: unexpected symbol near ‘+’
>
Lua看到一些代码没意义(两个加好连在一起), 所以它输出一个简短的解释关于为什么它没意义. 这解释也是被知道作为错误信息.
因为Lua只是电脑程序, 它的解释开始时不总是容易理解, 但是这个(unexpected symbol near ‘+’)还算直白. 接着加号的, Lua发现一些意外 - 在这个例子额外的加号.
在输出错误信息后, Lua显示另外提示让你知道它已经准备为了更多的输入.
你将会得到相似的错误信息如果你遗漏print的圆括号, 想这样:
> 2 + 2
stdin:1: unexpected symbol near ‘2’
> print 2 + 2
stdin:1: ‘=’ expected near ‘2’
如果你键入一些没意义的不包括那些不完整的, Lua让你继续在下行完成.例如, 按Enter在右括号之前, 键入右括号, 然后再按Enter, 像这样:
> print(2 + 2
>> )
4
Lua发现你键入的第一行是不完整的, 所以它输出>>. 这是继续提示 Lua让你知道它会等待你完成你开始想输入的方法. 当Lua在下行得到右括号, 它能够输出结果
其他数值符号
你也可以用科学符号写数值, 在大写或小写e的前面部分被e后面的10的权相乘, 例如, 5e2 意思是 5倍10的2次方是500. 科学符号通常用来写极大或极小的数, 或让Lua输出他们.
这里有一些例子:
> print(5e2)
500
> print(5e-2)
0.05
> print(1.2193263111264E17 /
987654321)
123456789
> print(123456789 * 987654321)
1.2193263111264e+17
> print(2.3283064365387e-10 *
4294967296)
1
生活中的数是基于10的十进制. 这意味着有0-9 10个数. lua也能理解16进制(基于16)数, 使用字母a-f(或A-F)来代表10到15. 16进制数需要用0x或0X打头(在x之前是零, 不是字母O.) 他们必须是整数. 看一下这些例子:
> print(0x1)
1
> print(0x10)
16
> print(0xff)
255
> print(0XA)
10
> print(0x03e8)
1000
> print(-0xf000)
-61440
> print(0xff.ff)
stdin:1: ‘)’ expected near ‘.
’
Lua5.0 不能理解16进制数.
解释器知道如何
在学习更多关于Lua语言, 你需要知道关于解释器的2个事
退出解释器
不久, 你将会想暂停解释器, 有3种方法来退出解释器:
.按Ctrl+C. 发送中断信息给解释器. 如果解释器在等待你键入一些东西, 这将会退出解释器. 如果解释器被卡住, 不停的一遍一遍做一些事, 然后这组合键将会返回到等待你键入的状态.
.按Ctrl+Z(或在像Unix平台中, 包括 Mac OS X,按Ctrl+D )在开始的空行按Enter. 这将发送 end-of-file(EOF). 这是Lua的一个信号将会放弃尝试从你那得到输入.
.停止解释器最多的方法是键入下面行
os.exit()
解释器捷径
根据你的系统, 你可能可以使用你键盘上的上下键来滚动先前编辑过的行
在windows xp和windows2000中, 这种查看历史的功能被使用在cmd shell. 在windows95,98和ME中, 被使用在doskey设备(如果在运行). 在像Unix的系统上, 他被使用在GNU Readline 和History libraries中, 如果他们被连接到你编译过的lua代码.
有另一个打字保护器. 当解释器看到一行代码开头是=, 向下面一样, 他会处理该行余下的的部分把他们想成print圆括号中的代码:
> =2 + 2
4
这不是lua语言适当的一部分 - 它只工作在你交互性的键入一些代码给解释器. 这意味着它不会被困惑当你使用等号时认为它是适当的Lua, 这些你将会在下节学到. 在这章的一些例子中你可以使用 = 代替print(),但不全部都是. 粗略的说, 当你输入一行你可以单独使用 .... 按照一致性, 这本书使用print(),但是你应该在适当的时候用=.
如果你键入上下键来查看历史, 你可能(根据你的系统)看到很多行开头使用 = 的已经转换成开头使用return. 你将会在下章学习有关return的知识.
数值陷阱
在高雅的数学世界和有时候是潦草的计算机时间的交集部分, 可能发生客观的事, 这节解释主要的一个.
除以零和溢出
在算法里, 除以零是未定义的, Lua中也是一样, 这实际上意味着当在你的链接器上链接你的Lua代码时除以零将会发生的事. 去找出在你系统上所发生的, 简单的让某个数除以零并且观察结果.
这里是有可能性的不完整的列表:
.Lua 可能突然的退出(没有错误信息).
.Lua可能冻结并且你的操作系统可能显示错误信息(如果必须, 使用Ctrl+C来退出Lua)
.计算可能正确并且给出结果.这结果可能不是很规律,反而可能像这样-1.#IND, 1.#INF, Inf, or NaN.
如果你得到一个假的数比如NaN,注意:这些通常有不寻常的行为,在一定程度上不等于他们自己.
除非你准备得到这结果, 决不除以零.
在大多数系统中, 最高和最低的数有可能多于300个数字(当你用10进制输入时). 如果你的超出范围, 除以零的警告将会被应用.
变量和赋值
和大多数程序语言一样, Lua有变量, 现在,你可以把它们想成是包含值的存储空间(到目前为止数是你唯一遇到的变量,但是在这章你将会很快学到其他的类型。)当你把一个值放入变量中后,你可以通过它的名字来使用它。
赋值基础
把一个值放入一个变量中称作赋值。
这里有2个赋值的例子(伴随着一些输出来显示发生了什么):
> NumberA = 2
> print(NumberA)
2
> NumberB = 2 + 2
> print(NumberB)
4
> print(NumberA + NumberB)
6
等号把一个值赋值给一个变量。在这些例子中, 2被赋值给变量NumberA,4(2+2的结果)被赋值给变量NumberB。
当一个值已经被赋值给一个变量后,你可以使用变量的名字来使用这个值,就好像print(NumberA) 或 print(NumberA + NumberB).
注意Lua的等号不同于代数中的等号。代数中的等号是一个陈述表明两个事物是相等的。 Lua的等号是一个指令让两个事物相等,所以左边的可以被右边的代替。因为这样,在程序中特殊的变量在不同的时间点可能包含不同的值。这里有个例子:
> Sum = 2 + 2
> print(Sum)
4
> Sum = 2 + 5000
> print(Sum)
5002
这里有几个对于变量名的规则,或则标识符:一个标识符开头必须是一个字母或则下划线。它不能包含字母,下划线,数字以外的任何东西。标识符不能是Lua的保留字和关键字,它们是and, break, do, else, elseif,
end, false, for, function, if, in, local,nil, not, or, repeat, return, then, true, until, and while.
下面全都是有效的标识符
❑ a
❑ A
❑ ABC
❑ _xyz
❑ something_55
❑ AnotherThing
❑ _____
下面不是有效的标识符
❑ function (关键字)
❑ this-var (包含字母,下划线,数字以为的东西)
❑ 1stThing (开头不是字母或下划线)
Lua是大小写区分的,这意味着NUM,Num,和num是不同的标识符:
> NUM = 1
> Num = 2
> num = 3
> print(NUM)
1
> print(Num)
2
> print(num)
3
这同样意味着FUNCTON,Function,和fUnCtIoN是有效的标识符,因为它们都不是关键字function。
这是标识符的各种形式:
❑ totalsales
❑ total_sales
❑ totalSales
❑ TotalSales
一些程序甚至使用不同的形式来表示不同的变量类型。如果你工作在别人的代码上, 根据风格是用代码,在你自己的代码里, 选择一个风格并坚持下去。这本书使用如TotalSales的风格。Lua它自己通常使用TotalSales风格,所以在这本书里,你可以在Lua例子中寻找是否有变量被定义或被构建来辨别风格
Lua有一些开头用下划线后跟字母(也可能使数字)的特殊的变量,像 _G , _PROMPT2。远离使用像这些的名字让你的变量不会和它们冲突。
一个简单的下划线(_)经常被使用作为垃圾变量-需要被赋值, 但是将不会被使用。(你会在第4章和书的其它部分看到)。
多重赋值
你可以同时对多个变量赋多个值。你也可以同时输出多个值。逗号被用在两者之间。这些是如何在多重赋值中使用逗号并且同时输出多重值的例子:
> Sum, Product, Exponent = 10 + 10, 10 * 10, 10 ^ 10
> print(Sum, Product, Exponent)
20 100 10000000000
在这些例子中,3个值被形成通过对自己加10,对自己相乘,对自己上升10个权。这里有3个值分别赋值给3个变量Sum, Product,和 Exponent。这3个变量(更确切的说,是变量中的3个值)然后被输出。你可以使用多重赋值来交换,旋转,或交换变量中的内容。这是例子
> A, B = 1, 2
> print(A, B)
1 2
> A, B = B, A
> print(A, B)
2 1
> John, Jane, Jolene = “chips”, “lemonade”, “egg salad”
> print(John, Jane, Jolene)
chips lemonade egg salad
> John, Jane, Jolene = Jane, Jolene, John
> print(John, Jane, Jolene)
lemonade egg salad chips
继续翻译中