3

Perlスクリプト言語の学習を始めたばかりで、質問があります。

continuePerlでは、ブロックがループで機能するがwhiledo whileループでは機能しない論理的な理由は何forですか?

4

3 に答える 3

7

http://perldoc.perl.org/functions/continue.htmlから

BLOCK に接続された continue BLOCK がある場合 (通常は while または foreach 内)、Cの for ループの 3 番目の部分と同様に、条件が再度評価される直前に常に実行されます。

つまり、forループでは、3 番目の引数は継続式 (たとえばfor (initialization; condition; continue)) であるため、必要ありません。一方、次のようなスタイルで使用forする場合:foreach

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

それは受け入れられるでしょう。

于 2011-05-11T11:26:47.390 に答える
4

ブロックはループの 3 番目の式 (インクリメント/デクリメントなど)とまったく同じであるため、ループでcontinue使用されていないと思われます。forfor

例えば。次のコード ブロックはほとんど同等です。

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

$i = 0;
while ($i < 10)
{
}
continue
{
    $i++;
}
于 2011-05-11T11:24:24.233 に答える
2

continue意味のあるところならどこでもブロックを使用できます: while、、ループ、untilおよびforeach「基本」ブロック(別のステートメントの一部ではないブロック)。リスト反復構造のfor代わりにキーワードを使用できることに注意してください。もちろん、その場合はブロックを使用できます。foreachcontinue

他のみんなが言ったように、for (;;)ループにはすでにcontinue一部があります-最初に実行したいのはどれですか?

continuedo { ... } while ...構文的には非常に異なるため、ブロックも機能しません( doBLOCKを引数として取る組み込み関数であり、while一部はステートメント修飾子です)。本当に必要な場合は、ダブルカーリーコンストラクト(引数ブロック内の基本ブロック)を使用できると思います。

do {
    {
        ...;
        continue if $bad;
        ...;
    }
    continue {
        ...; # clean up
    }
} while $more;
于 2011-05-11T12:15:03.867 に答える