加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 23:27:43 所属栏目:大数据 来源:网络整理
导读:我在过去几个月里一直在处理很多Lua,我真的很喜欢大部分的功能,但我仍然缺少那些: 为什么没有继续? 有什么解决方法吗? 解决方法 语言管理词汇作用域的方式产生了包括goto和continue的问题。例如, local a=0repeat if f() then a=1 --change outer a en
我在过去几个月里一直在处理很多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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读