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 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。