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'
时间: 2024-09-15 04:59:28

Lua goto 用法举例的相关文章

java8中的localdate和localtime用法举例

java8中的localdate和localtime用法举例如下:这两个方法使我们可以方便的实现将旧的日期类转换为新的日期类,具体思路都是通过Instant当中介,然后通过Instant来创建LocalDateTime(这个类可以很容易获取LocalDate和LocalTime),新的日期类转旧的也是如此,将新的先转成LocalDateTime,然后获取Instant,接着转成Date,具体实现细节如下: // 01. java.util.Date --> java.time.LocalDate

c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

c++ stl集合set介绍    c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素 2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数 3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同) set模板原型://K

Lua函数用法研究_Lua

在Lua 基本语法快速入门 中有涉及到函数的用法,但只是普通的应用,并没有深成次的研究一下,介于函数用的还是比较多的就专门做个专题研究一下~   一.函数.变量的用法 函数的定义用关键字function .然后加函数名和变量.注意后面没有do.最后以end结束. 在函数中的变量默认是全局变量,但通常情况下函数中的变量都是在函数中有效的.所以要在声明的时候加上"local" 标明只在局部有效.二.返回多个结果值 在Lua中的函数可以返回多个返回值.这与C等语言有很大的不同.因为从根本上讲

MySQL的LAST_INSERT_ID用法举例

环境:MySQL Sever 5.1 + MySQL命令行工具 首先看个例子(主键是自增长): mysql> insert into bankaccount(name,balance) values('123', 1000); Query OK, 1 row affected (0.06 sec) mysql> insert into bankstatement(action, txdate, amt, toaccno, fromaccno) values ('122', curdate(),

Wordpress中使用SyntaxHighlighter插件用法举例

1.友好的扩展性:通过简单的继承和改写就可以实现新语法的高亮. 2.强大的配置性:SyntaxHighlighter提供多种配置参数,能够充分满足定制化的高亮需求. 3.简便的集成性:即使手动安装SyntaxHighlighter也非常简便,可以轻松实现论坛.博客的语法高亮. WordPress上支持SyntaxHighlighter的语法高亮插件众多,Robin选用的是:syntax-highlighter-and-code- prettifier 这款插件支持绝大多数的配置功能,下面Robi

mysql操作查询结果case when then else end用法举例

    转载来自:http://blog.sina.com.cn/s/blog_7c5d61f30101cx0q.html 举例1: 使用该查询,得出iFavoriteID,iFavUserType ,cUser,iArticleID,dFavoriteTime五个字段的值: SELECT iFavoriteID,CASE WHEN iFavUserType = 0 THEN '新闻管理员'WHEN iFavUserType = 1 THEN '商家'WHEN iFavUserType = 2

CSS教程:li和ul标签用法举例

LI代码的格式化: A).运用CSS格式化列表符: ul li{ list-style-type:none; } B).如果你想将列表符换成图像,则: ul li{ list-style-type:none; list-style-image: url(/blog/images/icon.gif); } C).为了左对齐,可以用如下代码: ul{ list-style-type:none; margin:0px; } D).如果想给列表加背景色,可以用如下代码: ul{ list-style-t

PHP里OR的用法举例

  也许你根本就没注意到OR的存在,那么先看个例子:$choice1 = "wdphp.com"; $choice2 = ""; $default = "vducn.com";$val_1 = $choice1 || $choice2 || $default; $val_2 = $choice1 or $choice2 or $default; $val_3 = ($choice1 or $choice2 or $default);echo &q

PostgreSQL 三角函数的用法举例 - 已知3点求夹角(旋转门续)

背景 前几天写了一篇关于旋转门的数据压缩算法在PostgreSQL中的实现,里面用到了PostGIS里面的ST_Azimuth函数用来计算夹角,其实在PostgreSQL 中,我们还可以使用三角函数,以及三边来求夹角. https://yq.aliyun.com/articles/59101 文中用到的计算夹角的方法如下 SELECT 180-ST_Azimuth( ST_MakePoint(o_x, o_val+i_radius), -- 门上点 ST_MakePoint(v_x, v_val