2011-07-02 17 views
20

Załóżmy mamJak uzyskać dostęp do wartości mapy za pomocą klucza, jeśli klucz nie został znaleziony w scala?

var mp = Map[String,String]() 

..... 

val n = mp("kk") 

Powyższy rzuci błąd wykonania w przypadku klucza „KK” nie istnieje.

Oczekiwano, że n będzie miało wartość null w przypadku, gdy klucz nie istnieje. Chcę n null, jeśli klucz nie istnieje.

Jaki jest właściwy sposób radzenia sobie z tą sytuacją w scala z krótkim przykładem kodu?

+7

Nigdy nie używaj 'null' w scala. Wartości Null są "zastępowane" przez Opcje. – paradigmatic

Odpowiedz

43

Po pierwsze, prawdopodobnie nie chcesz null, ponieważ to prawie zawsze jest oznaką złego kodowania w Scali. To, czego chcesz, to dla typu n Opcja [Łańcuch], która mówi, że wartość jest łańcuchem lub brakuje jej. Właściwym sposobem na to jest za pomocą metody .get() na mapowaniu

val n = mp.get("kk") 

Jeśli naprawdę potrzebują NULL (na współdziałanie z bibliotekami Java, na przykład), można użyć .getOrElse()

val n = mp.getOrElse("kk", null) 
+14

mp.get ("kk"). OrNull :) –

17

Spróbuj tego:

val valueOpt = mp.get("kk") 

Twój wynik jest typu Option[String] i może być None lub Some(actualValue). Można użyć dopasowywania wzorców, aby dowiedzieć się:

valueOpt match { 
    case Some(value) => println(value) 
    case None => println("default") 
} 

bardziej właściwy sposób zrobić tego rodzaju rzeczy jest jednak to, aby korzystać z metod na Option, np:

println(valueOpt.getOrElse("default")) 

Look dla API dokumenty dla Optionthere.

Edit: Uwaga że Map sama bezpośrednio definiuje getOrElse metodę też, jak pokazano w odpowiedzi Dave'a.

Powiązane problemy