lua变量
变量在使用前,必须显式地声明变量,即创建该变量.
编译程序在执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值.
lua变量有三种类型:全局变量,局部变量,表中的域.
lua中的变量全是全局变量,哪怕是语句块和函数里,除非显式地用local声明为局部变量.
局部变量的作用域为从声明位置开始到所在语句块结束.
变量的默认值均为nil.
a = 6
local b = 12
function cd()
c = 7
local d = 14
end
cd()
print(a) ---全局变量 6
print(b) ---局部变量 12
print(c) ---全局变量 7
print(d) ---局部变量 nil
赋值语句
赋值是改变一个变量的值和表域的最基本的方法
[root@iZ2zeg7wauly0hl9qmxvwlZ lua]# lua
Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> a = 'hello'..'world'
> print(a)
helloworld
>
lua可以对多个变量同时赋值,变量列表和值列表的各个元素以逗号分开,赋值语句右边的值分别赋给左边的变量
[root@iZ2zeg7wauly0hl9qmxvwlZ lua]# lua
Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> a,b=10,20
> print(a,b)
10 20
>
遇到赋值语句lua会先计算右边的值然后再进行赋值操作,所以可以这样交换变量的值
[root@iZ2zeg7wauly0hl9qmxvwlZ lua]# lua
Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> a,b=10,20
> a,b=b,a
> print(a,b)
20 10
>
当变量个数和值的个数不一致时,lua会以变量的个数为基础采取一下策略
变量个数>值个数 按变量个数补足nil
变量个数<值个数 多余的值会被忽略
[root@iZ2zeg7wauly0hl9qmxvwlZ lua]# lua
Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> a,b,c=1,2
> print(a,b,c)
1 2 nil
> a,b=2,4,6
> print(a,b)
2 4
>
多值赋值经常用来变量交换或将函数的调用结果返回给变量
a,b=f()
函数f返回两个值,一个给a,一个给b
应该尽量使用局部变量,这有两个好处:
- 避免命名冲突
- 访问局部变量比全局变量要快
索引
对table的索引使用方括号,lua也提供了.操作
t[i]
t.i -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用
[root@iZ2zeg7wauly0hl9qmxvwlZ lua]# lua
Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> a={}
> a['key']='value'
> print(a['key'])
value
> print(a.key)
value
>