Istnieje wiele sposobów postępowania z typem Option
. Przede wszystkim jednak zdaj sobie sprawę, o ile lepsze jest posiadanie tego, zamiast odniesienia do potencjalnego null
! Nie próbuj się go pozbyć, ponieważ jesteś przyzwyczajony do tego, jak działa Java.
Jak ktoś niedawno stwierdził: trzymaj się go przez kilka tygodni, a będziesz jęczeć za każdym razem, gdy będziesz musiał wrócić do języka, który nie oferuje typów Option
.
Teraz jak na swoje pytanie, najprostszy i ryzykowny sposób to:
mymap.get(something).get
Wywołanie .get
na Some
obiektu pobiera obiekt wewnątrz. Daje jednak wyjątek środowiska wykonawczego, jeśli zamiast tego masz None
(na przykład, jeśli klucza nie ma na mapie).
znacznie czystszym sposobem jest użycie Option.foreach
lub Option.map
tak:
scala> val map = Map(1 -> 2)
map: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)
scala> map.get(1).foreach(i => println("Got: " + i))
Got: 2
scala> map.get(2).foreach(i => println("Got: " + i))
scala>
Jak widać, ten pozwala na wykonanie oświadczenie wtedy i tylko wtedy, gdy mają rzeczywistą wartość. Jeśli zamiast tego Option
ma wartość None
, nic się nie stanie.
Wreszcie, jest również popularne w użyciu wzorca dopasowania na Option
typów tak:
scala> map.get(1) match {
| case Some(i) => println("Got something")
| case None => println("Got nothing")
| }
Got something
Zobacz również: http://stackoverflow.com/questions/9364250/working-with-some-and-option -in-scala –
Cudowną rzeczą w opcji jest to, że zmusza cię do radzenia sobie z przypadkiem 'Brak'. –