将选项[Any]转换为int

时间:2012-07-30 05:59:18

标签: scala

如何将其转换为Int而不是Some(Int)

val a: Option[Any] = Some(1)

我尝试了toInt,但却发出错误value toInt is not a member of Option[Any]

3 个答案:

答案 0 :(得分:39)

你可以做a.get.asInstanceOf[Int]然而它不安全。更好的方法是保留类型信息,即使用Option[Int]而不是Option[Any]。然后,您不需要使用asInstanceOf转换结果。

val a:Option[Int] = Some(1)
val i = a.get

直接使用get是不安全的,因为如果OptionNone,则抛出异常。因此使用getOrElse更安全。或者您可以使用a上的模式匹配来获取值。

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
})

答案 1 :(得分:13)

使用.asInstanceOf方法

a.getOrElse(0).asInstanceOf[Int]

我必须注意,这是 unsafe 强制转换:如果你的选项不包含Int,你将获得运行时异常。

答案 2 :(得分:3)

你不能施展它的原因是因为你不应该施放。虽然静态类型编程语言允许您在一种类型和另一种类型之间手动转换,但我能给您的最佳建议是忘记这些功能。

特别是,如果您想充分利用每种编程语言,请尝试创建一个合适的用户,如果某种语言不适合您想要的用法,只需选择另一种语言(例如动态类型):

  

如果您进行了强制转换,则会转换潜在的编译时错误,我们就是这样   喜欢因为它很容易解决,我们就是ClassCastException   不喜欢因为它发生在运行时。如果你需要使用演员表   Scala,很可能你使用的是不正确的模式。