2.0.1探讨Lua的基础知)

<p>在笔记之前,先提供16年5月31日在官网下载的LuaForWIndows的解释器安装包:点我<a href="http://pan.baidu.com/s/1slmrg2x" title="Title">LuaForWindows.zip</a>,宝典上提到的你应该使用5.1的最小版本。</p>
<p><h6>废话</h6>
Lua解释器是交互的,你输入命令就可以得到回复,就像是你在用Lua这门语言和解释器进行对话一般。双击执行你的Lua解释器输入print("Hello World")就会回显到你解释器的下一行。这行语句获取你输入的字符串,然后将它传递给了print(args)这个函数,该函数再将它输出到解释器窗口中。
对于Lua错误信息的理解,你可以使用一个案例来进行解读,在输入pnrint("Hello World!")之后enter执行,你会发现如下的信息<h6>[PS:lua中--代表注释]</h6>

stdin:1: attempt to call global 'pnrint' (a nil value)--这里指出了错误发生的行数
stack traceback:
        stdin:1: in main chunk
        [C]: ?

如上所示Lua提示你试图调用一个全局的pnrint(args),但是她是一个空值,剩余的信息叫做栈追踪[stack traback],他指出了错误出现在哪里,当你从一个函数调用另一个函数的他们很有用。另外使用上下键可以快速翻阅你的输入历史记录。
</p>
<h6>Lua处理数字</h6>
<p>
输入print(2+2)你会看见系统响应一个4,因为解释器帮你做了运算操作,Lua的运算操作符支持如下:
<li>+:加,如上个例子所示
<li>-:减,同上,变更符号即可
<li>*:乘,同上
<li>/:除,同上
<li>^:幂,example:print(13^2)=169
<li>%:取模,example:print(13%2)=1
<li>-: 取负,example:print(-(13^2))=-1</li>
也可以使用复杂的表达式,注意运算的优先级和括号的使用即可,即确保明确的数据关系。
对于比较大的数值,比如1,000,000,000,000,000(10^15),你可以使用科学计数法来进行表示解释器能够识别:

> print(10^15)
1e+015
> print(-10^15)
-1e+015
>

Lua为了将他们显示出来,先将他们转化成了科学记数法,同时你也可以以这种方式来表达一个数字,表示取一个数10的几次幂,幂指数为第二个数字(中间的e不区分大小写):

> print(1.234e6)
1234000
> print(1.234\*10\*10\*10\*10\*10\*10)
1234000
> print(1234e-4)
0.1234
> print(1234\*(10^-4))
0.1234

十六进制表示法:Lua可以自动的将十六进制的数值转换成十进制,以0x开头后面接着有效的0~F十六进制数字:

> print(0x1)
1
> print(0xF)
15
> print(0x19)
25
> print(0x10a4)
4260

coding时你可以使用这种格式来表示数字,Lua会对他们进行正确的转换,Lua仅以十进制或者科学记数法来表示结果,不管这些数字是怎么输入的。

> print(2\*0xF)
30
> print(0x10^2)
256

</p>
<p><h6>关于浮点的理解</h6>
在Lua中每一个数都是使用浮点来进行表示的,在一般的使用中没有什么不妥的地方,但有时候....

> pointTwo = 1.2 - 1.0
> print(pointTwo<0.2)
true
> print(pointTwo)
0.2

显然,在这里0.2不能够被精确的表示为一个浮点数,因此编程语言必须在计算他的值和显示他的时候进入舍入。浮点数可以精确的表示所有的10-37~1037之间的整数,所以你不会尝尝用到这个问题。然而,舍入在您使用实数的时候可能会导致计算误差。
</p>
<p>
<h6>值和变量的理解</h6>
Lua和其他编程语言一样对于值和和变量之间进行了区分。了解值的种类和变量之间的区别对我们接下来的工作很有帮助。
什么是值?
他就是你直接使用的东西,就想17这个数,或者"hello"这个字符串。14是一个不同于17的值,但是他们都是一个数值,字符串"hello"是一个值,但是他和14、17是不同类型的值。
Lua提供了如下的几种基本数据类型
<li>number 所有的数字都属于这一类 example:1、7313、1e5、0xFF1a
<li>string 一个字符序列 example:"Hello"
<li>boolean 真(true)和假(false)属于这种类型
<li>function 函数是一个可以调用的语句集合
<li>table 表示传统的哈希(Hash)表(字典)和数组的混合类型
<li>thread 线程类型的值是一个可用于异步计算的协同程序(有限的轻量线程)
<li>userdata 用户数据是主语言(host language,通常是C)中所定义的传统的数据结构包装器
这几种数据类型都会在以后的工作中出现,需要进行仔细的理解。
</p>
</p>
<h6>使用type(args)函数</h6>
type(args)在Lua中用于确定一个给定值的类型,它会给你在编程中进行确认和验证带来更大的灵活性:

> print(type(t))
nil
> print(type(5))
number
> print(type(""))
string
> print(type(table))
table

如上所示,你对于传入的值进行了type(args)函数的调用,并且对他的结果进行了print(args)调用,所以它输出了你传入的值是何种类型,指的注意的是,第一个输出中,Lua解释器给出了nil因为解释器他找不到这个类型,所以他总是nil的。</p>
<p>
<h6>使用变量</h6>
变量可以看做是一个Lua值的临时名称,而同一个可以有多个名称。比如如下的例子:

> x=2
> y=2
> print(x+y)
4

这个例子中,你将x、y两个变量分别绑定了一个值2,然后调用print(args)进行输出。
变量名的命名规范:必须以下划线或者字母开头。名称本身不能包含有除字母、数字或者下划线之外的其他字符。同时也不能是关键字,并且是区分大小写的。
变量的赋值:

> foo=14
> print(foo)
14
> foo="hello"
> print(foo)
hello
> x=12--将数值4绑定到x
> y=x+2--将标识符x的值赋予标识符y并+2。这在字面上表示y=12+2
> print(x+y)
26
> x=15--如果你将x从新赋值,那么也只是意味着你将x重新绑定了值,与y无关
> print(x+y)
29
--值和变量之前的区别尝尝会被混淆,尤其是你在更高级的论题上工作的时候,你可以使用Lua解释器作
--为一个工具来探索这些规则

对多个变量赋值的形式:

> x,y=12,13--如果运算符左边的变量个数比右边多,那么剩下的变量会被赋予nil值
> print(x+y)
25

</p>
<p>
<h6>Lua中关于值的比较</h6>
Lua中的比较运算符由如下几种可供操作:
<li>相等 ==
<li>小于 <
<li>大于 >
<li>小于等于 <=
<li>大于等于 >=
<li>不等于 ~=</li>
“<”,“>”,“<=”,“>=”运算符只能用来比较相同类型的值,例如在数和数之间或者字符串和字符串之间进行比较,否则你会收到下面的错误信息:

> print(1>="hello")
stdin:1: attempt to compare string with number
stack traceback:
        stdin:1: in main chunk
        [C]: ?

换个说法就是:“==”和“~=”适用于所有的值,而大于和小于(“<”和“>”)这一组运算符只在数值和字符串内部有意义。

> print("hello"=="hello1")--进行字符串比较的时候比较的是他们的内容是否相同
false
> print("hello"=="hello")
true

</p>
<p>
<h6>Using 字符串</h6>
“>”、“<” 运算符可以在字符串上使用,但是结果将取决于系统内部对不同字符的排列次序,对于单个字符的比较,运算符比较两个字符在字符集中的次序; 对于多个字符比较,他将比较两个字符串中第一个出现的不同字符。

> print("hello"=="hello1")--1
false
> print("hello"=="hello")--2
true
> print("a"<"b")--3
true
> print("b">="a")--4
true
> print("abcd"<"abce")--5
true
> print("a"<"A")--6
false
> print("abcd"<"abcde")
true
> print("rests"<"test")--比较第一个出现的不同字符,也就是拿着'r'和't'比较
true

第6个例子,在标准的Lua字符集中,大写英文字母在小写英文字母签名,因此,'a'要比'A'大。
</p>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容