循环 – 为什么Lua没有“continue”语句?

前端之家收集整理的这篇文章主要介绍了循环 – 为什么Lua没有“continue”语句?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在过去几个月里一直在处理很多Lua,我真的很喜欢大部分的功能,但我仍然缺少那些:

>为什么没有继续?
>有什么解决方法吗?

解决方法

语言管理词汇作用域的方式产生了包括goto和continue的问题。例如,
local a=0
repeat 
    if f() then
        a=1 --change outer a
    end
    local a=f() -- inner a
until a==0 -- test inner a

在循环体中的局部a的声明屏蔽了名为a的外部变量,并且该局部变量的范围跨越直到语句的条件,因此该条件正在测试最内层a。

如果continue存在,则必须在语义上被限制为仅在条件中使用的所有变量都进入范围之后才有效。这是一个困难的条件,记录到用户和强制在编译器。围绕这个问题的各种建议已经讨论,包括不允许继续重复直到循环风格的简单答案。到目前为止,没有一个有足够的引人注目的用例来将它们包括在语言中。

该工作通常是反转将导致继续执行的条件,并且在该条件下收集循环体的其余部分。所以,下面的循环

-- not valid Lua 5.1 (or 5.2)
for k,v in pairs(t) do
  if isstring(k) then continue end
  -- do something to t[k] when k is not a string
end

可以写

-- valid Lua 5.1 (or 5.2)
for k,v in pairs(t) do
  if not isstring(k) then 
    -- do something to t[k] when k is not a string
  end
end

这是很清楚,通常不是一个负担,除非你有一系列精心设计的控制循环操作的剔除。

猜你在找的Lua相关文章