https://yq.aliyun.com/articles/11387

lua "诡异"的return用法

 

德哥 2016-03-29 15:38:42 浏览5690 评论0

摘要: 在Lua中, return的用法比较"诡异", 为什么这么说呢, 因为它只能用在block结束的地方, 不能用在block的一个中间部分.例如function a() i = 1 return i -- 这里会报错, 提示return后面必须是end, 意思是既然你要return了, 那么就结束这个块吧.

在Lua中, return的用法比较"诡异", 为什么这么说呢, 因为它只能用在block结束的地方, 不能用在block的一个中间部分.

例如

function a()
i = 1
return i -- 这里会报错, 提示return后面必须是end, 意思是既然你要return了, 那么就结束这个块吧.
i = 2
end

例如 :

> function a()
>> i = 1
>> return i
>> i = 2
stdin:4: 'end' expected (to close 'function' at line 1) near 'i'
那么如果要在一个函数或者一个block的非末尾部分使用return 怎么用呢?
可以把return 包在do end之间. 例如 :

> function a()
>> i = 1
>> do return i end -- 这里是允许的.
>> i = 2
>> end
> print(a())
1

另外, return在循环, 判断中的使用也和函数中类似, 必须使用在循环结束, 或者判断的一个拐点结束前. 例如 :

> if i == 1
>> then
>> return -- 这里不能使用, 因为下面不是elseif或者else或者end.
>> i=2
stdin:4: 'end' expected (to close 'if' at line 1) near '='

所以在判断中, 放在一个拐点结束前 :

if i == 1
then
return
elseif i == 2
then
return
else
return
end
-- 以上用法是可以的, return分别放在elseif, else, end前面. 拐点 结束前.
在循环中使用则放在循环结束前.
但是你会发现, 如果结束处用的是一个print函数, 居然不报错 :

> for x=1,10,1 do
>> print(x)
>> return
>> print(x+1)
>> end
1
2

return后面换成赋值就报错了

> for x=1,10,1 do
print(x)
return
print(x+1)
x=2
stdin:4: 'end' expected (to close 'for' at line 1) near 'x'
> for x=1,10,1 do
print(x)
return
x=2
stdin:4: 'end' expected (to close 'for' at line 1) near '='
"诡异"来形容不为过.
还是得把return包在一个do end里面

> for x=1,10,1 do
print(x)
do return end
print(x)
x=2
>> end
1

用在repeat中

> repeat do
i=1
print(i)
return
print(i)
end until i == 2
1
1
> repeat do
i=1
print(i)
return
print(i)
x=2 -- 这里又会报错.
end until i == 2
stdin:4: 'end' expected (to close 'do' at line 1) near 'x'
本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

lua "诡异"的return用法的更多相关文章

  1. C#中yield return用法分析

    这篇文章主要介绍了C#中yield return用法,对比使用yield return与不使用yield return的流程,更直观的分析了yield return的用法,需要的朋友可以参考下. 本文 ...

  2. C# yield return 用法与解析

    原文:C# yield return 用法与解析 C# yield return 用法与解析 本文参考自:http://www.jb51.net/article/54810.htm 当初没有认真理解 ...

  3. C# yield return用法

    本文实例讲述了C#中yield return用法,并且对比了使用yield return与不使用yield return的情况,以便读者更好的进行理解.具体如下: yield关键字用于遍历循环中,yi ...

  4. C#中的yield return用法演示源码

    下边代码段是关于C#中的yield return用法演示的代码. using System;using System.Collections;using System.Collections.Gene ...

  5. js 之 continue break return 用法及注意事项

    1,continue continue有两种用法: 1,continue; 这种用法必须包含在循环里,否则报错,例子: for(var i=0;i<10;i++){ if(i%2===0){ c ...

  6. 【转】C#中continue、break和return用法

    continue和break的用法一样,直接写上这个单词,后面加一个分号就行 比如: continue; break; 我们先来谈continue 看代码 for (int i=0; i<10; ...

  7. Break、continue、return用法(C++)

    (1)break 直接调出当前循环体.如果是嵌套循环,他只能调出一层循环体. Exp-1: 程序: #include<iostream> using namespace std; int ...

  8. Java-break,continue,return用法

    当年的我也算是基础小王子,但是长时间的不用导致我与他们越来越陌生了,所以我要把他们记在我的本本上. 首先我们要明白,java中到底有多少个循环关键字? 答:没错,就是3个,他们分别是:for(初始值: ...

  9. html、text、val、attr、prop区别。this.value和$(this).val()区别以及return用法

    html(): html() 方法返回或设置被选元素的内容 (inner HTML). 当使用该方法读取多个值时,它会返回第一个匹配元素的内容. 当使用该方法设置一个值时,它会覆盖所有匹配元素的内容. ...

随机推荐

  1. css css预处理器

    CSS预处理器(css preprocessor) 1.less: 2.sass: 3.scss: 4.stylus 参考: http://hao.jser.com/archive/2507/ htt ...

  2. 「BZOJ1000」A+B Problem

    写这个主要是为了凑\(BZOJ\)题解用的,不用在意.跳过即可 \(Code\) #include<bits/stdc++.h> using namespace std; int main ...

  3. VMware虚拟机下安装CentOS系统超详细教程

    链接:https://jingyan.baidu.com/article/fdffd1f8736173f3e98ca1e3.html 1.步骤一.工具准备 1.物理计算机一台 配置要求: 操作系统:w ...

  4. 图层锁定vlisp函数高版本图元自动淡色显示

    (defun c:tt(/ obj) (sk_layerLock (getvar "clayer") nil) (princ) ) ;;;name:sk_layerLock ;;; ...

  5. python基础之内置函数(一)

    内建函数都在 _builtins_ 里面 (1)abs() 取绝对值 adb(-10) 10 (2)bool()将参数转换成布尔型,返回值是True或False 参数是数字时,0返回False,其他任 ...

  6. postgreSQL PL/SQL编程学习笔记(三)——游标(Cursors)

    Cursors Rather than executing a whole query at once, it is possible to set up a cursor that encapsul ...

  7. What Goes Up UVA - 481 LIS+打印路径 【模板】

    打印严格上升子序列: #include<iostream> #include<cstdio> #include<algorithm> #include<cst ...

  8. Markdown 语法快速入门手册

    Markdown 是一种轻量级标记语言,能将文本换成有效的XHTML(或者HTML)文档,它的目标是实现易读易写,成为一种适用于网络的书写语言. Markdown 语法简洁明了,易于掌握,所以用它来写 ...

  9. jenkins-APP打包页面展示二维码【转】

    背景: 客户要求在APP打包页面展示二维码.虽然感觉这个功能很鸡肋,但是还是加上吧. 效果展示: 配置: 在上图中,106对应的内容是BuildName,我们可以通过build-name-setter ...

  10. <转> django模板语言filter方法

    Django的模板是一个简单的文本文件,它可以生成任何文本格式(HTML.XML.CSV等),在本文开始之前先看一个Django模板的例子: 从这个例子中可以看到,模板标签可以是单独出现的,如exte ...