Lua.1 lua的类型与变量

lua的变量


lua的变量命名与其他语言大致相似,有两点

1. 由数字,字母,下划线构成

2. 不可以使用数字开头


例如:


m n myBook _myiPhone _pc001 _00 _VERSION


注意:

    1. _00 这种下划线跟数字的变量不建议写

    2. _VERSION 下划线加大写字母的写法多用于保留字,尽量避免


局部变量

局部变量用local 来声明

例如:

local bag
 local cup
 local telNum = 110


全局变量

只需要给一个变量赋值,那么他就是全局变量

例如:

pcName = "Dell"
 car = "Benz"
 ID = 001

这些就是全局变量了


注释

单行注释,用 --


多行注释,用 --[[ ]]包起来

-- local num = 0
 -- num = 2


--[[
 function add(x,y)
     return x+y
 end
 ]]


Lua的类型与值

lua是一门动态语言,也称为脚本语言,它区别于我们传统的编译型语言,它是依赖于解释器来执行的,这里我们不做过多介绍。

lua的类型总共分为如下几类


string => 字符串

number => 数字

function => 方法(C/C++程序员可能更习惯称之为函数)

boolen => 布尔值,只有true和false

nil => 空,值只有一个是nil

table => 表,这是Lua最具特点的一个类型,许多特性都依赖于它

thread => 线程

userdata => 自定义类型


函数type可以根据一个值返回对应的类型,例如

type("hello") string
 type(1+1) number
 type(print) function
 type(true) boolean


string类型

字符串需要用用单引号或者双引号来作为界定符

a = "this is a string "
 b = "do you konw ?"
 c = 'i am xiaoming'
 d = 'php is the best language '

我们用系统函数print来把他们打印出来

print(a)
 print(b)
 print(c)
 print(d)


字符串可以用 .. 来连接

a = a .. b
 print(a)
 a = a .. c .. d
 print(a)

还可以连接number类型,大家可以试试


number类型

lua中没有 int double long short float这些类型,number类型表示一个实数,

一下表示都是可以的

num1 = 1
 num2 = 1.0
 num3 = 3e+1


table类型

官方解释table是一个关联数组,即具有特殊索引方式的数组(associative array)。

1.它不仅可以用整数来索引,也可以用字符串或其他类型的值来索引(除了nil)

2.没有固定大小,可以动态的添加值进来

3.table可以模拟出各种数据结构,包括类与对象都可以模拟出来

4.table不是值也不是变量,它是对象,用C++的解释就是它是内存中的一片区域,而变量只是指向它的指针


声明一个table最简单的办法就是用{}来表示

a = {} -- 声明了一个空table,将a指向这个表

a[1] = 1 -- 以整数为索引,值为1

a["sex"] = "man" -- 以字符串为索引

print(a[1]) -- 1

print(a["sex"]) -- man


table间的赋值只是引用关系

b = a
 b[1] = 2
 print(a[1]) -- 2
 b[1] = a[1] + 1
 print(a[1]) -- 3

由上面可以看到,a和b是共享一个table的,它们只是指向一个table的引用而已


function类型

函数在lua里面是第一类型的值,写过其他脚本语言的人可能不太陌生,但是像我

一样从C++这种语言转过来的会觉得非常别扭,居然可以这么用,其实大家想想,

C++里面不也是有函数指针吗,只是没有这么方便

我们可以把函数赋值给一个变量

function log()
     print("log")
 end
 log()


甚至可以当做参数传递

logVar = log
 logVar()

function log(msg)
     print(msg)
 end

 function main(log)
     log("main function")
 end

 main(log)