Reichweite in switch-case-Anweisung in Coffeescript
Bin ich mit dem LENKER in meine Rails 3.2 jquery-mobile-Anwendung.
Ich bin versucht zu schreiben, eine switch-case-Anweisung innerhalb einer Coffeescript-Methode wie
Handlebars.registerHelper 'status', (blog) ->
switch(parseInt(blog.status))
when [0..20]
status = "active"
when [20..40]
status = "Moderately Active"
when [40..60]
status = "Very Active"
when [60..100]
status = "Hyper Active"
return status
Ich erhalte kein Ergebnis . Wie zu verwenden Bereich, wenn . Bitte schlage
- Warum würde das funktionieren? Diese github issue scheint zu sagen, dass diese syntax nicht akzeptiert wurde.
InformationsquelleAutor useranon | 2012-06-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
switch
wird nicht funktionieren, da Cygal Hinweise in den Kommentaren (d.h. sehen Problem 1383). Einswitch
ist nur ein bessererif(a == b)
konstruieren und Sie müssen in der Lage sein, Dinge zu sagen wie:habe und es funktioniert, wenn Sie
switch
auf ein array. Der CoffeeScript-Designer gedacht, das hinzufügen einer (fragilen) Sonderfall zu behandeln arrays (die alle[a..b]
ist) speziell war es nicht Wert.Können Sie es mit einem
if
:Oder mit Kurzschluss
return
s so:Beachten Sie, dass Sie haben, die drei speziellen Fälle, die Sie hinzufügen müssen-Saiten:
status < 0
.status > 100
.status
istNaN
. In diesem Fall würde in der Regel fallen unter das Letzte "es ist nicht weniger als oder gleich 100" Niederlassung seitNaN => n
undNaN <= n
beide false für allen
.Ja, Sie absolut sicher sind, dass der status immer fallen in den angenommen Bereich. Auf der anderen Seite, das Unmögliche passiert, alle die Zeit, die software (daher der comp.Risiken mailing-Liste) und es gibt keinen guten Grund zu verlassen Löcher, die sind so schnell gefüllt.
Beachten Sie auch die addition der radix-argument, um die
parseInt
Anruf, Sie würden nicht wollen, dass eine führende null ein, um ein Durcheinander der Dinge. Ja, das radix-argument ist optional, aber es sollte wirklich nicht sein, und Ihre Finger sollten automatisch hinzufügen, 10
zu jedemparseInt
nennen, die Sie machen.swtich <nothing>
Ausdruck? =D (ich will nicht zu stehlen, keine Punkte buchen, die als neue Antwort)Hinzufügen von ein klein wenig zu mu ist zu kurz um Antwort, können Sie verwandeln Ihre zweite code-snippet in eine
switch
Ausdruck:Dies ist im wesentlichen äquivalent zu tun, eine
switch (true)
in JavaScript (wenn das CS-compiler generiert eineswitch (false)
- Anweisung mit dem negierten Bedingungen, um sicherzustellen, Boolesche Ergebnisse aus den Ausdrücken... glaube ich).Und der Grund, warum die
switch
Messbereiche nicht funktioniert, ist, dass reicht Literale in CS darstellen plain old JS-arrays (obwohl der compiler einige Optimierungen tricks, wenn es so etwas wiefor i in [1..something]
), so dass, wenn Sie sind befinden sich in einemswitch
behandelt werden, nur wie normale array-Werte:Den Wert innerhalb der
switch
- Anweisung ist im Grunde im Vergleich zu jedemcase
Wert mit===
, die funktioniert nur für primitive, nicht für arrays (und selbst wenn es funktioniert für arrays, wäre es Tests array Gleichheit, nicht, wenn dieswitch
ed-Wert enthalten ist, in dercase
ed-arrays).switch
aber das nächste mal werde ich. Ich denke, du hast Recht, aber die boolean-Kontext und mitswitch(false)
stattswitch(true)
.