ya he leído que la sentencia if en Scala siempre devuelve una expresiónnovato Scala tener problemas con la opción, ¿cuál es el equivalente del operador ternario
Así que estoy tratando de hacer lo siguiente (pseudo código)
sql = "select * from xx" + iif(order.isDefined, "order by " order.get, "")
estoy tratando con
val sql: String = "select * from xx" + if (order.isDefined) {" order by " + order.get} else {""}
pero me sale este error:
illegal start of simple expression
orden es una opción [String]
Yo sólo quiero tener un parámetro opcional a un método, y si ese parámetro (en este orden de casos) no se pasa entonces a la omitida
lo haría ser la forma más idiomática de lograr lo que estoy tratando de hacer?
- editar -
supongo que apuré demasiado pedir
encontré esta manera,
val orderBy = order.map(" order by " + _).getOrElse("")
Es esta la forma correcta de hacerlo?
pensé mapa estaba destinado para otros fines ...
La razón por la que su código no se está compilando es porque necesita paréntesis alrededor del ' if' expresión. Pero como señala Tomasz Nurkiewicz, hay mejores formas de escribir esto de todos modos. –
¿Alguien quiere comentar sobre * por qué * necesitamos corchetes alrededor de la expresión if (que no sea "porque compila")? –
@LuigiPlinge esto es solo una especulación, pero puede ser que quisieran evitar la confusión del programador sobre cómo se asociaría una expresión como '1 + if (b) 2 else 3 + 4 '. ¿Es '1 + (si (b) 2 else 3) + 4' o' 1 + (si (b) 2 else 3 + 4) '? Ciertamente, podrías tener una gramática que resuelva esta ambigüedad (lo hace Haskell), pero eso no significa que las personas no cometerán errores porque asumieron un comportamiento diferente. –