Come faccio a giocare questa ad un int e non Some(Int)
Fusioni Opzione [Qualsiasi] a int
val a: Option[Any] = Some(1)
ho provato toInt
e ha dato un errore value toInt is not a member of Option[Any]
Come faccio a giocare questa ad un int e non Some(Int)
Fusioni Opzione [Qualsiasi] a int
val a: Option[Any] = Some(1)
ho provato toInt
e ha dato un errore value toInt is not a member of Option[Any]
Si potrebbe fare a.get.asInstanceOf[Int]
tuttavia non è sicuro. Un modo migliore sarebbe quello di conservare le informazioni sul tipo, ad esempio utilizzando Option[Int]
anziché Option[Any]
. Quindi non è necessario trasmettere il risultato con asInstanceOf
.
val a:Option[Int] = Some(1)
val i = a.get
Utilizzando get
è direttamente pericoloso in quanto se il Option
è un None
viene generata un'eccezione. Quindi usare getOrElse
è più sicuro. Oppure puoi utilizzare la corrispondenza dei modelli su a
per ottenere il valore.
val a:Option[Any] = Some(1) // Note using Any here
val i = (a match {
case Some(x:Int) => x // this extracts the value in a as an Int
case _ => Int.MinValue
})
Utilizzando .asInstanceOf
metodo
a.getOrElse(0).asInstanceOf[Int]
Devo notare che questo è non sicuro cast: se la tua Opzione non contiene Int, otterrai il runt ime eccezione.
Il motivo per cui non puoi lanciare è perché non si dovrebbe lanciare. Mentre i linguaggi di programmazione tipizzati statici consentono di eseguire manualmente il cast tra un tipo e l'altro, il miglior consiglio che posso darti è di dimenticare queste funzionalità.
In particolare, se si desidera ottenere il meglio da ogni linguaggio di programmazione, provare a creare un utente appropriato e, se una lingua non si adatta all'utilizzo desiderato, è sufficiente sceglierne un altro (ad esempio uno dinamico). :
Se fai getta che si accende un potenziale errore di tempo di compilazione, che abbiamo come perché è facile da risolvere, in un ClassCastException, che non ci piace perché si verifica in fase di esecuzione. Se hai bisogno di usare cast in Scala, molto probabilmente stai usando un pattern improprio.
O stai usando librerie Java (mal progettate) ... – ziggystar
Mentre apprezzo il sentimento, nei progetti di vita reale, le cose non sono sempre in bianco e nero. C'è una legittima necessità per me di farlo in quanto potrebbe essere uno dei 4 tipi restituiti dall'API di terze parti sottostante. – Bob
Questo è un meccanismo molto debole. Puoi fare lo stesso con schemi migliori probabilmente ... Perché non provi a spiegare cosa vuoi fare? – Edmondo1984
Dimentica il bit sul casting; la corrispondenza del modello è chiaramente la strada da percorrere –
Sono d'accordo. La corrispondenza dei pattern è molto potente e impressionante :) –