2016-07-22 2 views
1

я следующие данные в тип данных, которые я не использовал еще вариант [Любая] = Some (Карта:Получить значение из опции [Любой] = Some (Карта)

Option[Any] = Some(Map(subject -> matt, predicate -> likes, object -> coffee, label -> 1_10)) 

Как бы я вытащить данные из карты внутри, например, я хочу получить ярлык. Есть ли что-то, что мне нужно для его преобразования?

+0

В Scala (как в Java), вы можете в значительной степени бросить любого типа во что-то другое. 99% времени это запах кода, поскольку вы все равно можете делать то, что хотите, не выбрасывая систему типов из окна. – marios

ответ

2

Если вы знали тип карты (или, по крайней мере, тип метки и это значение), вы можете вытащить его с помощью asInstanceOf:

val a = Option[Any](Map("a" -> "b", 1 -> 2)) 

a.flatMap(_.asInstanceOf[Map[Int, Int]].get(1)) 
// Some(2): Option[Int] 

Обычно это лучше не использовать asInstanceOf но прибить тип, прежде чем руки ... то вы могли бы более просто использовать:

a.flatMap(_.get("label")) 
+0

Это работает, но я бы возражал против обхода системы типов, если у вас нет альтернативы. – marios

+2

@marios согласен. Последний абзац должен быть: не используйте asInstanceOf, как правило, лучший способ. –

Смежные вопросы