变量
lua中变量有两类,一类是全局变量,此为变量的默认形式 ,二是局部变量,需要使用local
来声明
变量的赋值有如下形式:
# 1 先声明后赋值
local a
a='A'
print("1:",a) --> 1: A
# 2 直接赋值
a='B'
print('2:', a) --> 2: B
# 3 多变量赋值
a,b = 'C', 'D'
print("3:", a,b) --> 3: C D
# 4 多变量赋值(2)
a,b = "E"
print("4:", a,b) --> 4: E nil
数据类型
在lua中有nil
, boolean
, number
, string
, function
, userdata
, thread
,和 table
.
可以使用type()
函数查看变量的数据类型,例如
print(type(1)) --> number
print(type(type(1))) --> string
nil
nil
表示空值,对于任何未赋值/未声明的变量,其值都为nil
,将变量赋值为nil
等同于删除该变量.
print(a) --> nil
-
boolean
有false
和true
两种形式,在lua
中,false
和nil
都是假值,其余的都是真值(包括0)
a= true
print(a) --> true
常见的逻辑运算符有and or not
and
的运算结果为,如果第一个操作数为false
,则返回第一个操作数,否则返回第二个操作数
or
的运算结果为,如果第一个操作数不为false
,则返回第一个操作数,否则返回第二个操作数
> 4 and 5 --> 5
> nil and 13 --> nil
> 0 or 5 --> 0
> false or 'hi' -> 'hi'
> nil or false -> false
lua中对于booleam值的比较有如下几种运算符,其得到的结果都是booleam类型
>
<
<=
>=
==``~=
,其中~=
表示不等于
-
number
表示整形integer
和双精度类型float
的数字, 在lua5.3
以前,是不区分整形和浮点型的数字的,但在之后将这两类数字做了区分,但他们在大多的使用场景下都是兼容的
1==1.0 -->true
type(1)-->number
type(1.0)-->number
math.type(1)-->integer
math.type(1.0)-->float
lua中有一个数据库math
,其可以进行数学相关的运算,还可以取随机数函数/取整函数等功能.
数字转字符串可以使用tostring
函数
-
string
字符串,声明方式有如下三种
-- 1. 单引号
a= `a`
print(a) --> a
-- 2. 双引号
b = "b"
print(b) --> b
-- 3. 双重中括号[[]],此种方式可以声明多行的字符串,如果字符串中可能出现`]]`符号,那么在声明字符串时可以使用一定数量的`=`号来处理,如下:
c = [[
print("12345")
]]
print(c) --> print("12345")
d=[==[
print(d[[1]])
]==]
print(d) -->print(d[[1]])
字符串的拼接采用..
,例如
print("1234"..567) --> 1234567
lua中的+
号只用来表示数值运算,不能用来拼接字符串,但对于"1"+"2"
这样的表达式时,lua会尝试将其转换为1+2
进行运算,如果不能转换为数字,则会报错
计算字符串的长度可以使用#
符号,例如print(#"abc")
将输出3
,不过对于中文,此处输出的是中文数*2的长度,例如print(#'测试123')
将输出7
字符串转数字可以用tonumber
函数来实现,如果字符串不能转换为数字,则返回nil
> tonumber('1') --> 1
> tonumber('1.0') --> 1.0
> tonumber(' 1 ') --> 1
> tonumber('a') --> nil
也可以通过tonumber(str, 进制数)来将指定进制的字符串转为十进制数,例如tonumber("12", 16) -->18
-
table
表在lua中是唯一的存储结构,所有的变量都是存储在表这样的格式中的,其可以用来表示数组/集合/结构体等功能,例如math
模块,其就是一个table
,math.sin
指的是以sin
为key,在math
中获取方法.
lua中table
没有深拷贝功能,因此拷贝只能拷贝对象的应用.
后续会重点写一下表相关的知识
网友评论