32

私は次のコードに似たものを持っています:

_.each data, (value, type) ->
    switch type
        when "answered"
            icon = "results_answered"
            label = definitions.results.metrics.ta
        when "leftblank"
            icon = "results_lb"
            label = definitions.results.metrics.tlb
        when "standing"
            icon = "results_standing"
            label = definitions.results.metrics.cs
        when "minimum"
            icon = "results_min"
            label = definitions.results.metrics.lowest
        else
            continue

    metricLine = utilities.div("metricline")
    metricLine.grab utilities.sprite(icon, "metric_icon")
    metricLine.grab utilities.div("metriclabel", label + ":")
    metricLine.grab utilities.div("metricvalue", value)
    metricContainer.grab(metricLine)

metricContainer

しかし、それは私のブラウザに次のエラーをスローします:

Uncaught SyntaxError:不正なcontinueステートメント

continueエラーをスローせずに、私が試しているようなものを含めることは可能ですか?

4

2 に答える 2

82

次のループ反復を続行する場合は、渡すものが関数であるため、returnではなく、が必要です。continueeach

コメントで、C#ループに精通しているforeachため、を使用したいとおっしゃいましたcontinue。違いは、C#ではforeach実際のループ構造を処理しているのに対し、each実際にはループの反復ごとに関数を呼び出しているため、(言語レベルでは)ループではないため、実行できないcontinueことです。

于 2013-02-12T17:26:09.880 に答える
11

コードでループ構造を使用しているのではなく、クロージャーを使用しています。ループを終了するには、continueを使用する必要があります。各関数にアンダースコアを使用する場合は、returnを介してクロージャ/関数を終了する必要があります

#language construct
for item in items
    if some_condition
        continue

#closure construct
_.each data, (item) ->
    if some_condition
        return
于 2013-02-12T17:30:11.843 に答える