Ho già letto che l'istruzione if in Scala restituisce sempre un'espressionescala newbie avere problemi con opzione, qual è l'equivalente del operatore ternario
Così sto cercando di fare quanto segue (pseudo codice)
sql = "select * from xx" + iif(order.isDefined, "order by " order.get, "")
sto cercando con
val sql: String = "select * from xx" + if (order.isDefined) {" order by " + order.get} else {""}
ma ottengo questo errore:
illegal start of simple expression
ordine è un'opzione [String]
Voglio solo avere un parametro opzionale per un metodo, e se questo parametro (in questo ordine caso) non è passato poi basta saltare
cosa sarebbe essere il modo più idiomatico per ottenere ciò che sto cercando di fare?
- modifica -
Credo che mi sono sbrigato troppo chiedere
ho trovato in questo modo,
val orderBy = order.map(" order by " + _).getOrElse("")
È questo il modo giusto per farlo?
ho pensato mappa è stata destinata ad altri scopi ...
Il motivo per cui il tuo codice non è compilato è perché hai bisogno di parentesi intorno al ' se' espressione. Ma come sottolinea Tomasz Nurkiewicz, ci sono modi migliori per scrivere comunque. –
Chiunque vuole commentare * perché * abbiamo bisogno di parentesi attorno alla if-expression (diversa da "perché compila")? –
@LuigiPlinge questa è solo una speculazione, ma potrebbe essere che volevano evitare la confusione del programmatore su come si associ un'espressione come '1 + if (b) 2 else 3 + 4'. È '1 + (if (b) 2 else 3) + 4' o' 1 + (if (b) 2 else 3 + 4) '? Certamente potresti avere una grammatica che risolve questa ambiguità (Haskell lo fa), ma ciò non significa che le persone non farebbero errori perché hanno assunto un comportamento diverso. –