【问题标题】:Perl programming: continue blockPerl 编程:继续块
【发布时间】:2011-08-23 05:26:06
【问题描述】:

我刚开始学习 Perl 脚本语言,有一个问题。

在 Perl 中,让 continue 块与 whiledo while 循环一起工作,而不是与 for 循环一起工作的逻辑原因是什么?

【问题讨论】:

  • 在 Perl 工作 13 年,我从未编写过 continue 块。主要是因为相同的语句可以放在循环的末尾。它基本上就像next-with-behavior。但是,当我不想再对迭代做任何事情时,我只会next。编写for( ; cond() ; iteration())... 并获得相同的行为要容易得多。
  • 我同意,Axeman。 For 当然更可取并且具有相同的行为。谢谢。
  • continue 在您使用 next 时仍会执行。当我需要从内部循环中断到外部循环时,我会使用它,但仍想确保执行某些条件。是的,我可以通过将我想要执行的内容放在内部循环之后并使用next 来做到这一点,但是其他所有内容也将被执行。这只是使程序流程混乱的另一件事。使用continue,我可以知道它将被执行,并且如果我愿意,可以跳过一些事情。

标签: perl for-loop while-loop continue


【解决方案1】:

来自http://perldoc.perl.org/functions/continue.html

如果 有一个 continue BLOCK 附加到 一个块(通常在一段时间或 foreach ),它总是只执行 在条件即将到来之前 再次评估,就像第三次一样 C 中 for 循环的一部分

意思是在for 循环中,第三个参数是 continue 表达式,例如for (initialization; condition; continue),因此不需要它。另一方面,如果在foreach 样式中使用for,如:

for (0 .. 10) {
    print "$i\n";
} continue { $i++ }

这是可以接受的。

【讨论】:

  • 太棒了@TLP!我完全明白了。谢谢!
  • 此语法是正确的,但在此上下文中,语法 for 被解释为 foreach 语句。如果你将 for as for 和 foreach 作为 foreach 使用会更好。你会被许多错误阻止。
  • @Znik 不可能出错,因为forforeach 实际上是同一个函数的别名。
  • 我们不能简单地做:for (0 .. 10) { print "$i\n"; $i++ } 我在这里遗漏了什么吗?
【解决方案2】:

我怀疑continue 块没有在for 循环中使用,因为它完全等同于for 循环的第三个表达式(增量/减量等)

例如。以下代码块大部分是等效的:

for ($i = 0; $i < 10; $i++)
{
}

$i = 0;
while ($i < 10)
{
}
continue
{
    $i++;
}

【讨论】:

  • 我们不能简单地做:$i = 0;而 ($i
【解决方案3】:

您可以在任何有意义的地方使用continue 块:whileuntilforeach 循环,以及“基本”块——不属于另一个语句的块。请注意,您可以使用关键字for 而不是foreach 来进行列表迭代构造,当然在这种情况下您可以使用continue 块。

正如其他人所说,for (;;) 循环已经有一个continue 部分——你想先执行哪一个?

continue 块也不能与do { ... } while ... 一起使用,因为从语法上来说这是一个非常不同的东西(do 是一个以 BLOCK 作为参数的内置函数,while 部分是一个语句修饰符)。我想如果你真的需要的话,你可以使用双卷曲结构(参数块内的基本块):

do {
    {
        ...;
        continue if $bad;
        ...;
    }
    continue {
        ...; # clean up
    }
} while $more;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2016-12-20
    • 1970-01-01
    相关资源
    最近更新 更多