2017-12-06 16 views
1

Ich versuche, einen ternären Operator in scala zu machen, aber es scheint tatsächlich, dass die '?' Charakter kann nichtTernary Operator funktioniert nicht scala

hier gelöst werden wird die fertige Methode

object Credit { 
    def getMaximumWeek(orderId: Int, locale: String): Int = { 
    val orderCompletedHistoryCount = Order.getOrderCompletedHistoryCount(orderId, locale); 
    orderCompletedHistoryCount == 0 ? 0: Order.getMaximumAllowedWeeks(orderId, locale) 
    } 
} 

auf diese verwiesen link , Ich bekomme einen Fehler Connot Auflösung Symbol '?' auch beiden Verfahren sind wieder ganze Zahlen

+4

Der von Ihnen gepostete Link zeigt, dass es in scala keinen ternären Operator gibt und Sie können 'if' verwenden, da es ein Ausdruck ist, zB' if (orderCompletedHistoryCount == 0) 0 else Order.getMaximumAllowedWeeks (orderId, locale) ' – Lee

Antwort

3

Scala haben keinen ternären Operator, wie der ? Operator C++ beispielsweise hat, so dass der Fehler erwartet wird, unabhängig davon, was die beiden operadans zurückzukehren.

Verwenden Sie eine if-else Ausdruck stattdessen wie folgt aus:

if(orderCompletedHistoryCount == 0) 
    0 
else 
    Order.getMaximumAllowedWeeks(orderId, locale) 
+0

das ist ein bisschen komisch, gibt es einen Weg, es mit out zu tun, wenn sonst? sonst könnte es wie dieses 'if (orderCompletedHistoryCount == 0) Order.getMaximumAllowedWeeks (orderId, locale)' –

+0

@BasilBattikhi vielleicht, aber kein sauberes sicher. Sie benötigen den else-Teil in der if-Anweisung. – gsamaras

+1

"Verwenden Sie stattdessen eine if-else-Anweisung, wie folgt:" - In Scala gibt es keine 'if'-Anweisung. Es gibt nur einen 'if' Ausdruck. Wenn 'if' eine Anweisung wäre, könnten Sie sie nicht verwenden, um einen bedingten Operator zu ersetzen, da der bedingte Operator ein Ausdruck und keine Anweisung ist. Ihre Antwort funktioniert * nur * weil 'if' keine Aussage ist. –

1

Sie Scalaz dafür verwenden können. Der einzige Unterschied ist, dass es | Zeichen anstelle von : Zeichen erfordert.

import scalaz.Scalaz._ 

false ? "Yes" | "No" // returns No 

Es ist nicht nur für booleans, können Sie es mit Option Objekten versuchen, so gut:

None ? "Defined" | "Empty" // returns Empty 

Sie sollen die folgenden Zeilen hinzufügen, um build.sbt es zu benutzen:

libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.2.16" 
+1

Vielen Dank für Ihre Antwort, ich war überrascht, wenn ich es ohne Drittanbieter verwenden kann –

+0

Leider gibt es keine ternäre Operator-Unterstützung in der Scala-Standardbibliothek. Sie können Ihre eigenen schreiben oder eine solche Bibliothek benutzen. – Feyyaz