Chciałbym gorąco zachęcam, aby nie używać formValues.get("whatever")
, częściowo dlatego, że składnia jest bardzo mylące, to wygląda jak dzwonisz get
z kluczowym argumentem (jak na przykład na mapie), kiedy naprawdę dzwonisz pod numer get
na Option
(co jest niebezpieczną operacją - powinieneś zawsze trzymać się z dala od get
na Option
), a następnie apply
na wynikowej mapie (również niebezpieczne). To zamieszanie jest winą Scali, nie twoją, ale nadal chcesz uniknąć wchodzenia do niej.
Zamiast tego można użyć exists
na Option
wraz z contains
na mapie. Oto nieco uproszczony przykład:
val containsKey = formValues.exists(_.contains(key))
ten powróci true
tylko jeśli Option
jest niepusty i mapa zawiera on ma klucz.
Jeszcze lepszym rozwiązaniem jest unikanie if
-statement takiego:
val os: Option[Seq[String]] = for {
m <- formValues
v <- m.get(key)
} yield v
os.foreach { v => \\ do something with the value }
Tu skończyć z Option
który zawiera wartości wskazywanej przez key
jeśli oryginalny Option
jest niepusty i mapa zawiera ten klucz.