Lua:嵌套if语句

时间:2012-09-12 10:24:37

标签: lua

Lua是一种轻松而强大的语言,但有时候感觉缺少我们在其他语言中习惯的一些非常方便的功能。我的问题是关于嵌套if条件。在Perl,Python,C ++中,我通常倾向于避免嵌套构造并尽可能编写简单代码,如:

# Perl:
for (my $i = 0; $i < 10; ++$i) {
    next unless some_condition_1();
    next unless some_condition_2();
    next unless some_condition_3();
    ....
    the_core_logic_goes_here();        
}

Lua缺少nextcontinue语句,因此相同的代码如下所示:

-- Lua:
for i = 1, 5 do
    if some_condition_1() then
        if some_condition_2() then
            if some_condition_3() then
                the_core_logic_goes_here()
            end
        end
    end
end

所以我想知道是否有标准方法来避免Lua中的嵌套if块?

5 个答案:

答案 0 :(得分:5)

我不知道这是否特别惯用,但您可以使用单个嵌套循环和break来模拟continue

for i = 1, 5 do
    repeat
        if some_condition_1() then break end
        if some_condition_2() then break end
        if some_condition_3() then break end
        the_core_logic_goes_here()
    until true
end

答案 1 :(得分:5)

在Lua 5.2上,您可以使用goto声明(请小心)!

该关键字的一个典型用法是替换丢失的continuenext语句。

for i = 1, 5 do
  if not some_condition_1() then goto continue end
  if not some_condition_2() then goto continue end
  if not some_condition_3() then goto continue end
  the_core_logic_goes_here()
::continue::
end

答案 2 :(得分:4)

  

有时感觉缺少我们在其他语言中习惯的一些非常方便的功能

权衡是概念的经济性,这导致实现简单,这反过来导致Lua着名的速度和小的尺寸。

至于你的代码,这不是最广泛的解决方案(请参阅其他受访者有两种实现方式继续),但对于您的特定代码我只写:

for i = 1, 5 do
    if  some_condition_1() 
    and some_condition_2() 
    and some_condition_3() then
        the_core_logic_goes_here()
    end
end

答案 3 :(得分:0)

for v in pairs{condition1,condition2,condition3} do
    if  v() then
        the_core_logic_goes_here()
    end
end

你可能喜欢吗?

“Lua缺少下一个或继续声明”Lua作为下一个声明和一个非常相似的功能“ipairs”。

答案 4 :(得分:0)

解决方案1。

您可以将所有条件添加到if语句并使用else语句,您应该这样做。所以像这样:

list

解决方案2.

你可以使用类似但看起来更像其他语言的东西,你只是做if cond_1() and cond_2() and cond_n() then the_core_logic_goes_here() else -- do something else here end ,如果不满足if cond_n() then else return end则只返回nil。它们应该看起来像这样:

cond_n()

然而,我真的认为你应该使用前者,它是一个更好的解决方案,我很确定lua解决方案1.将编译成更快的字节码。