Lua goto 用法举例

简介:
Lua支持goto语法, 但是有一定的局限性.
例如
1. 不能在block外面跳入block(因为block中的lable不可见), 
2. 不能跳出或者跳入一个函数. 
3. 不能跳入本地变量的作用域.
Lua poses some restrictions to where you can jump with a goto. First, labels
follow the usual visibility rules, so you cannot jump into a block (because a
label inside a block is not visible outside it). 
Second, you cannot jump out of
a function. (Note that the first rule already excludes the possibility of jumping
into a function.) 
Third, you cannot jump into the scope of a local variable.

例子 : 
vi lua
i = 0
::s1:: do
  print(i)
  i = i+1
end
if i>3 then
  os.exit()
end
goto s1


[root@db-172-16-3-150 ~]# lua ./lua 
0
1
2
3

但是以上用法在命令行中会失败, 因为命令行中的block和文件不一样, 一个文件就是一个大block(函数例外).
[root@db-172-16-3-150 ~]# lua
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> i = 0
> ::s1:: do
>>   print(i)
>>   i = i+1
>> end
0
> if i>3 then
>>   os.exit()
>> end
> goto s1
stdin:1: no visible label 's1' for <goto> at line 1

在命令行中do end为一个block, 所以后面无法跳入.
goto在Lua中还可用于模拟continue , redo这种用法. 因为Lua目前没有continue和redo的用法.
i = 0
while i<10 do
  ::redo::
  i = i+1
  if i%2 == 1 then 
    goto continue 
  else 
    print(i)
    goto redo
  end
  ::continue::
end

不能跳入一个本地变量的作用域, 例如 : 
[root@db-172-16-3-150 ~]# cat lua 
do 
  goto notok1
  local i = 1
  print(i)
  ::notok1::  -- 本地变量的作用域内, 所以无法跳转
  i = i+ 1
  ::ok::  -- 本地变量的作用域结束, 所以可以跳转.
end
报错 : 
[root@db-172-16-3-150 ~]# lua ./lua 
lua: ./lua:6: <goto notok1> at line 2 jumps into the scope of local 'i'

目录
相关文章
lua语言——特殊用法
lua语言——特殊用法
254 0
|
6月前
|
存储 NoSQL Redis
Redis的Lua脚本有什么作用?
Redis Lua脚本用于减少网络开销、实现原子操作及扩展指令集。它能合并操作降低网络延迟,保证原子性,替代不支持回滚的事务。通过脚本,代码复用率提高,且可自定义指令,如实现分布式锁,增强Redis功能和灵活性。
251 1
|
5月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
228 0
|
1月前
|
缓存 分布式计算 NoSQL
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
29 2
|
2月前
|
存储 JSON Ubuntu
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
|
3月前
|
存储 NoSQL Redis
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
|
5月前
|
JSON 监控 数据格式
使用Lua代码扩展上网行为管理软件的脚本功能
本文介绍了如何使用Lua脚本增强上网行为管理,包括过滤URL、记录用户访问日志、控制带宽和自动提交监控数据到网站。Lua是一种轻量级语言,适合编写扩展脚本。文中提供多个示例代码,如URL过滤器、用户活动日志记录器和带宽控制器,帮助用户根据需求定制网络管理功能。通过这些示例,用户可以快速掌握Lua在上网行为管理中的应用。
174 4
下一篇
无影云桌面