Frage

Bei der Verwendung von CFML und CF9 ich in der Regel var Rahmen meiner Schleifenvariablen; in diesem Fall local.i, zum Beispiel:

<cfloop list="#this.list#" index="local.i">
  <cfif Len(local.i) GT 10>
    // do something
  </cfif>
</cfloop>

Ich begann vor kurzem ein paar Sachen in CFScript Konvertieren und (zu meiner Enttäuschung Ich fand heraus, dass es keine Möglichkeit, eine Schleife ist über eine Liste in CFScript) Ich frage mich, ob ich soll noch var Rahmen meiner Schleifenvariablen und wie:

for (i = 1; LTE ListLen(this.list); i = i + 1 ) {
  if (Len(ListGetAt(this.list, i) GT 10)) {
    // do something
  }
}

Should I local.i = 1 und local.i = local.i + 1 istead des Beispielcodes tut in meinem Beispiel? Ist es notwendig?

Bearbeiten : Ich sollte auch fragen, ob die CFScript Form meiner CFML Schleife korrekt ist; Ich frage, weil ich gerade bemerkt, dass meine CFML Schleife ein , (Komma und Leerzeichen) verwendet für das delimiter Argument, das in der CFScript Version der Schleife Nicht-Existenz scheint.

War es hilfreich?

Lösung

alle Funktionen noch die Variablen Umfang standardmäßig, wenn Sie keinen festlegen, die es nicht-Thread-sicher weggelassen würde. Überall dort, wo Sie vorher sollten gebrauchte var haben, sollten Sie jetzt local verwenden.

Wie bei dem Komma + Leerzeichen Trennzeichen, zwei Dinge:

  1. Falls Sie nicht bewusst sind, die Trennzeichen Argument der Listenfunktion ist nicht für Multi-Zeichenbegrenzern, es für mehrere Trennzeichen ist; so Ihre Liste wird Split für jedes Auftreten eines Kommas sein, sowie jedes Auftreten eines Raumes.

  2. Sie verwenden das gleiche Argument als Teil Ihrer listLen und listGetAt Methoden, etwa so:

    for (i = 1; LTE ListLen(this.list, ', '); i = i + 1 ) {
      if (Len(ListGetAt(this.list, i, ', ') GT 10)) {
        // do something
      }
    }
    

Andere Tipps

Sie müssen auf jeden Fall den lokalen Bereich verwenden, wie Adam sagt, aber im Fall von Schleifen Ich denke, es ein starkes Argument ist Schlüsselwort für die Verwendung des „var“, anstatt den „lokalen“ Präfixes aus Gründen der Lesbarkeit. Mit CF9 sind Sie nicht mehr gezwungen, auf Platz var Erklärungen an der Spitze der Funktion, so alles, was Sie tun müssen, ist hinzuzufügen „var“ zu Ihrer „für“ Bedingungsanweisung für alle den Index „i“ Variablen Thread-sicher zu werden.

Unter in Bens guten Punkt, um die Länge der Liste speichern, bevor die Schleife beginnt und mit dem prägnanten i ++ Zuwachs Stil Code wäre:

var listLength  =   ListLen( this.list );
for (var i = 1; LTE listLength; i++ ) {
    if (Len(ListGetAt(this.list, i) GT 10)) {
    // do something
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top