¿Cómo echo esto a un Int y no Some(Int)
Opción moldeada [Cualquier] a int
val a: Option[Any] = Some(1)
Probé toInt
y se dio un error value toInt is not a member of Option[Any]
¿Cómo echo esto a un Int y no Some(Int)
Opción moldeada [Cualquier] a int
val a: Option[Any] = Some(1)
Probé toInt
y se dio un error value toInt is not a member of Option[Any]
Puede hacer a.get.asInstanceOf[Int]
, pero no es seguro. Una mejor manera sería retener la información del tipo, es decir, utilizando un Option[Int]
en lugar de un Option[Any]
. Entonces no necesitarías lanzar el resultado con asInstanceOf
.
val a:Option[Int] = Some(1)
val i = a.get
Usando get
es directamente peligroso ya que si el Option
es una None
se produce una excepción. Entonces, usar getOrElse
es más seguro. O puede usar la coincidencia de patrones en a
para obtener el valor.
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
})
Usando .asInstanceOf
método
a.getOrElse(0).asInstanceOf[Int]
Tengo que tener en cuenta que esto es inseguro elenco: si su Opción no contiene Int, obtendrá runt excepción de ime
La razón por la que no puedes lanzar es porque no debes lanzar. Si bien los lenguajes de programación estáticos mecanografiados le permiten convertir manualmente entre un tipo y el otro, la mejor sugerencia que le puedo dar es que se olvide de estas características.
En particular, si desea obtener lo mejor de cada lenguaje de programación, intente hacer un usuario adecuado, y si un idioma no se ajusta al uso que desea simplemente elija otro (como uno de tipo dinámico) :
Si haces proyecta haces de un posible error en tiempo de compilación, que como porque es fácil de resolver, en un ClassCastException, que no nos gusta porque se produce en tiempo de ejecución. Si necesita utilizar yesos en Scala, es muy probable que esté utilizando un patrón incorrecto.
O está utilizando bibliotecas Java (mal diseñadas) ... – ziggystar
Si bien aprecio el sentimiento, en los proyectos de la vida real, las cosas no siempre son en blanco y negro. Hay una necesidad legítima para mí de hacer esto, ya que podría ser uno de los 4 tipos devueltos por la API de terceros subyacente. – Bob
Este es un mecanismo muy débil. Puede hacer lo mismo con mejores patrones, probablemente ... ¿Por qué no intenta explicar lo que quiere hacer? – Edmondo1984
Olvídate de la cuestión del casting; coincidencia de patrones es claramente la manera de ir –
Estoy de acuerdo. La coincidencia de patrones es muy poderosa e impresionante :) –