美文网首页
2.0.1探讨Lua的基础知)

2.0.1探讨Lua的基础知)

作者: 湫刀鱼 | 来源:发表于2016-06-01 11:18 被阅读0次

<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>

相关文章

  • 2.0.1探讨Lua的基础知)

    在笔记之前,先提供16年5月31日在官网下载的LuaForWIndows的解释器安装包:点我 LuaForWind...

  • redisgo操作LUA脚本

    LUA脚本基础学习:LUA脚本--菜鸟教程[https://www.runoob.com/lua/lua-tuto...

  • Lua中的CAPI概述

    头文件lua.h: Lua提供的基础函数,包括创建Lua环境,调用Lua函数,读写Lua环境中的全局变量,以及注册...

  • 2.0 Python - 子目录

    0.0 总目录 2.0.1什么是Python 2.2Python基础 2.2.1基础语句 2.2.2Python的...

  • lua基础

    Lua 5.3 参考手册 http://www.runoob.com/manual/lua53doc/manual...

  • LUA基础

    1定义: num = 100 这里定义一个全局变量叫num,赋值100 在Lua中定义变量没有类型,根据...

  • lua基础

    fact阶乘 for循环 table 闭包 类 UnPack 这篇文章主要介绍了Lua UnPack函数用法实例,...

  • Lua 基础

    【转载请注明出处】:https://www.jianshu.com/p/abd9eb83418c 基本语法 注释 ...

  • Lua极简入门(十)——面向对象

    在介绍完Lua的基础知识包括元表,函数式编程之后,终于到了Lua面向对象编程。虽然并不打算使用Lua进行大型应用系...

  • lua 讲义 --2014.09.13

    Lua 本文是以读者了解Lua基本语法为基础展开的。 Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基...

网友评论

      本文标题:2.0.1探讨Lua的基础知)

      本文链接:https://www.haomeiwen.com/subject/tsdhdttx.html