2014-06-13 8 views

Odpowiedz

10

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.

Powiązane problemy