Lua基础笔记

二、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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值