Подтвердить что ты не робот

Вариант трансляции [Any] в int

Как мне передать это в Int, а не Some(Int)

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

Я пробовал toInt и дал ошибку value toInt is not a member of Option[Any]

4b9b3361

Ответ 1

Вы можете сделать a.get.asInstanceOf[Int], но это небезопасно. Лучше всего было бы сохранить информацию типа, то есть использовать Option[Int] вместо Option[Any]. Тогда вам не нужно будет выводить результат с помощью asInstanceOf.

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

Использование get напрямую небезопасно, поскольку, если Option является None, генерируется исключение. Поэтому использование 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
})

Ответ 2

Использование метода .asInstanceOf

a.getOrElse(0).asInstanceOf[Int]

Я должен отметить, что это небезопасный листинг: если ваш параметр содержит не Int, вы получите исключение во время выполнения.

Ответ 3

Причина, по которой вы не можете ее использовать, заключается в том, что вы не должны бросать. В то время как статические типизированные языки программирования позволяют вручную отбрасывать между одним типом и другим, лучшее предложение, которое я могу вам дать, - это забыть об этих функциях.

В частности, если вы хотите получить максимальную отдачу от каждого языка программирования, попробуйте сделать правильный пользователь, и если язык не подходит для использования, вы просто хотите выбрать другой (например, динамически типизированный):

Если вы делаете броски, вы включаете потенциальную ошибку времени компиляции, которую мы например, потому что это легко решить, в ClassCastException, которое мы не нравится, потому что это происходит во время выполнения. Если вам нужно использовать броски в Scala, скорее всего, вы используете неправильный шаблон.