Lua基础笔记

来源:互联网 发布:金星秀停播原因知乎 编辑:程序博客网 时间:2024/05/22 12:06
二、Lua基础语法

2.1 全局变量

1、全局变量不需要声明,默认初始值是nil,给一个变量赋值后就创建了这个全局变量,
如果要删除一个全局变量,只需要将其赋值为nil,Lua是大小写敏感的。

注释: 单行注释--
多行注释 --[[  


2.2 值和类型

Lua是动态类型语言,变量不需要类型定义
Lua中有8个基本类型:
类型:nil :一个全局变量没有被赋值以前默认值为nil,给全局变量赋值nil、可以删除该变量
类型:boolean :Lua中所有的值都可以作为条件。在条件中除了false和nil,其他值都为真,所以0和空串都为真
类型:number :表示实数,整数类型和浮点数类型都属于number
类型:string
类型:userdata
类型:function
类型:thread
类型:table

变量没有预定义的类型,每一个变量都可能包含任一种类型的值。
在运行时,Lua会自动转换string和number之间的类型

特殊字符:
.. 字符串连接

显式转换string成number:函数tonumber()如果string不是正确的数字则返回nil
显式转换number成string:函数tostring()

2.3 表达式

二元运算符:+  -  *  /  ^加、减、乘、除、幂
一元运算符:- 负数

这些运算符的操作数都是实数

关系运算符:< > <= >===~=
小于 大于小于等于大于等于等于不等于

返回结果为false或true
==和~=比较两个值,如果两个值类型不同,Lua认为两者不同
nil只和自己相等
Lua通过引用比较tables、userdata、functions,当且仅当两者表示同一个对象时相等

Lua比较数字按数字大小,比较字符串按字母顺序,但是字母顺序依赖于本地环境

逻辑运算符:and or not

逻辑运算符认为false和nil是假,其他都为真,0也是真
and 和 or 的运算结果和它的两个操作数相关
a and b 如果a为false,则返回a,否则返回b
a or b 如果a为true,则返回a,否则返回b

and 的优先级比 or 高
C语言中的三元运算符 a?b:c
在Lua中写成:(a and b) or c

算术运算符的优先级如下:
^
not -
* /
+ -
..
< ><=>=== ~=
and
or

注意:lua没有自增运算符和自减运算符

2.4 语句

2.4.1 赋值语句

-----------------------------------------------------------------------------------------

三、Lua table的使用

表table是Lua特有的,最简单的构造函数是{},用来创建一个空的表。可以直接初始化数组:

days = {"Sunday","Monday","Tuesday","Wednesday","thrusday","Friday","Saturday"}

Lua 用 "Sunday" 初始化days[1],因为Lua中的表第一个元素的元素索引为1
用 "Monday" 初始化days[2],
....

table获取元素值可以使用days["key"]来获取,或者索引下标days[i]

a = {x=0,y=0} 

等价于
a = {};
a.x=0;
a.y=0;

标准库中提供了几种迭代器,包括
io.lines 迭代文件的每一行
pairs 迭代table的元素,pairs可以遍历表中的所有key,可以返回nil
ipairs 迭代数组元素,只能遍历到表中出现的第一个不是整数的key,遇到nil则退出

函数:
table.insert(arr,1,var)

#t 表示获取table表t的连续的key中的最大个数
例:
1、当键值为字符串等其他类型时,该操作符返回的值无法确认,比如

t = { x = "a", y = "b", z = "c"}
#t --输出是0

2、当键值为数值但不连续时,比如:

t = {"a", "b", "c"}
#t  -- 同第一个范例,此时正常为3

t[5] = "e"
#t --此时输出依然为3,因为t[4]为nil,计数到3处停止

综上,如果你的table是纯粹当一个连续的数组在用,那么#t是很方便的获得table长度的方法;
但如果你的table中key的数值不连续,或者有其他类型的key那么还是不要指望#能给出多有意义的结果来

0 0
原创粉丝点击