ich bereits gelesen habe, dass die if-Anweisung in scala immer einen Ausdruck gibtscala Neuling Probleme mit Option hat, was ist das Äquivalent des ternären Operators
So den folgenden (Pseudo-Code) Ich versuche
zu tunsql = "select * from xx" + iif(order.isDefined, "order by " order.get, "")
ich versuche, mit
val sql: String = "select * from xx" + if (order.isDefined) {" order by " + order.get} else {""}
Aber ich bekomme diese Fehlermeldung:
illegal start of simple expression
Auftrag ist eine Option [Zeichenfolge]
Ich möchte nur einen optionalen Parameter auf ein Verfahren haben, und wenn dieser Parameter (in diesem Fall Reihenfolge) ist es nicht übergeben dann nur
überspringen, was würde der idiomatische Weg sein, um zu erreichen, was ich versuche zu tun?
- bearbeiten -
Ich glaube, ich zu viel
zu fragenich auf diese Weise gefunden,
val orderBy = order.map(" order by " + _).getOrElse("")
eilte Ist dies der richtige Weg, es zu tun?
Ich dachte Karte für andere Zwecke gedacht war ...
Der Grund, dass Ihr Code nicht kompiliert ist, weil Sie Klammern um die ' wenn "Ausdruck". Aber wie Tomasz Nurkiewicz betont, gibt es bessere Möglichkeiten, dies zu schreiben. –
Wer möchte kommentieren * warum * wir brauchen Klammern um den if-Ausdruck (anders als "weil es kompiliert")? –
@ LuigiPlinge Dies ist nur Spekulation, aber es könnte sein, dass sie Programmierer Verwirrung vermeiden wollten, wie ein Ausdruck wie '1 + wenn (b) 2 else 3 + 4 'assoziieren würde. Ist es "1 + (wenn (b) 2 sonst 3) + 4" oder "1 + (wenn (b) 2 sonst 3 + 4)"? Sicherlich könnte man eine Grammatik haben, die diese Ambiguität löst (Haskell), aber das heißt nicht, dass die Leute keine Fehler machen würden, weil sie ein anderes Verhalten angenommen hätten. –