Attualmente sto lavorando su un progetto con Scala e sembra non comprendere appieno sistema dei tipi di Scala: -/Perché alcuni (1) .getOrElse (alcuni (1)) non sono di tipo Opzione [Int]?
ho la seguente situazione:
def reviews(id: Int) = Action { implicit request =>
Ok(html.products.reviews(
reviewlist,
reviewlist
.find(review => review.id == id)
.getOrElse(reviewlist.headOption)
))
}
Purtroppo il compilatore dice, non può convertire prodotto Opzione [Review], così ho cambiato il codice
reviewlist
.find(review => review.id == id)
.getOrElse(reviewlist.headOption)
con
id match {
case 0 => reviewlist.headOption
case id => reviewlist.find(review => review.id == id)
}
che sembra funzionare ora, anche se non è esattamente la stessa cosa che fa, per esempio, non mostrare più il primo record se viene inviato un ID di recensione non valido. farà quindi finta che non ci siano ancora recensioni disponibili.
Poi ho rotto il problema a un campione mooolto semplice:
val a: Option[Int] = Some(1).getOrElse(Some(1))
Così, qualcuno ha un'idea, perché l'espressione sul lato destro, non è del tipo opzione [Int] ?? Entrambi, Some (1) e None ereditano direttamente da Option e questa espressione è in realtà Some (1) in any o I I wrong?
abbastanza Interestinly
val a: Option[Int] = None.getOrElse(None)
opere, ma tutte le altre combinazioni non lo fanno ...
'x.orElse (Some (y))' è sempre sciocco per qualsiasi 'x' e' y'. Vuoi 'x.getOrElse (y)'. –
@pelotom è semplicemente [non vero] (http://stackoverflow.com/q/14305308/298389) –
Non sto dicendo che 'orElse' è sciocco, sto dicendo che passandogli un valore esplicitamente racchiuso in' Alcuni sono sciocchi. –