redis lua local 作用域

lua 不加前缀定义的为全局变量, 例如 : 
i = 1   -- 这样定义的为全局变量.
定义本地变量使用local前缀, 例如 : 
local i = 1 -- 定义一个本地变量.
本地变量的作用域比较诡异, 特别是在命令行中很"诡异", 需要理解这个chunk.

Unlike global variables, local variables have their scope limited to the block
where they are declared. A block is the body of a control structure, the body of a
function, or a chunk (the file or string where the variable is declared):

本地变量定义在一个函数体中, 那么作用域就在函数中.
如果定义在一个控制结构中, 那么就在这个控制结构中.
如果定义在一个文件中, 那么作用域就在这个文件中.
如果是使用命令行的话, 一条完整的命令就是一个chunk, 所以例如 : 

> local i = 1
> print(i)
nil

因为上面那条local i = 1是一个chunk, 定义完就抛弃了.
所以下面打印的是全局变量i, 而不是本地变量i.
除非写在一个执行体中.

> do 
>> local i = 1
>> print(i)
>> end
1

在命令行中一个chunk很好区分, >就是一个chunk , >>表示执行体未结束.
对于文件的话, 本地变量作用域在文件中, 所以以下文件可以打印出i=1

[root@db-172-16-3-150 ~]# vi lua
local i = 1
print(i)
[root@db-172-16-3-150 ~]# lua ./lua
1

在控制结构中的例子 : 

> if true then
>> local x = 1
>> print(x)
>> end
1
> print(x) nil

> i = 0
> while i < x do
local x = i*2 -- this x is local
print(x)
i = i+1
end
0
2
4
6
8
10
12
14
16
18
> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值