coldfusion cfml

switch(true) con casos dinámicos en coldfusion?



cfml (2)

Para evitar declaraciones if anidadas y mejorar la legibilidad, quería crear una sentencia switch(true){ ... } en Coldfusion. Lo usé a menudo en php, pero cuando pruebo esto en Coldfusion, recibo el siguiente error en la inicialización:

Error de plantilla

Esta expresión debe tener un valor constante.

Esto sucede cuando una caja de interruptor usa una variable en su condición, como:

//this example throws the error switch(true){ case foo == 1: writeOutput(''foo is 1''); break; }

Usar una instrucción switch (true) {...} con valores constantes (como explica el error) funciona:

//this example doesn''t throw the error switch(true){ case 1 == 1: writeOutput(''1 is 1''); break; }

¿Hay alguna forma de que la primera declaración funcione en Coldfusion? Tal vez con una evaluación de la variable o algún truco, o ¿es esto un definitivo no ir a Coldfusion?


Como señalaron Adam y Leigh, los valores del caso deben ser constantes. No estoy seguro de cuál es tu caso de uso real, pero puedes hacer algo como esto:

switch(foo){ case 1: writeOutput(''foo is 1''); break; case 2: writeOutput(''foo is 2''); break; case 3: writeOutput(''foo is 3''); break; case 4: case 5: case 6: writeOutput(''foo is 4 or 5 or 6''); break; default: writeOutput("I do not have a case to handle this value: #foo#"); }


En resumen: no. El valor del caso debe ser algo que pueda compilarse a un valor constante. 1==1 puede ser, ya que es true . foo == 1 no puede ser, ya que foo solo está disponible en tiempo de ejecución.

básicamente, lo que estás describiendo es una construcción if / else if / else todos modos, así que solo usa uno de esos.