Scala Map # get и возвращение Some ()
29780 просмотра
2 ответа
Я использую Map#get
функцию Scala , и для каждого точного запроса он возвращает какSome[String]
Есть ли простой способ удалить Some
?
Пример:
def searchDefs{
print("What Word would you like defined? ")
val selection = readLine
println(selection + ":\n\t" + definitionMap.get(selection))
}
Когда я использую этот метод и использую следующий ввод:
What Word would you like defined? Ontology
Возвращаемое значение:
Ontology:
Some(A set of representational primitives with which to model a domain of knowledge or discourse.)
Я хотел бы удалить некоторые () вокруг этого.
Какие-нибудь советы?
Автор: meriley Источник Размещён: 12.11.2019 09:15Ответы (2)
34 плюса
Есть много способов борьбы с Option
типом. Прежде всего, однако, осознайте, насколько лучше иметь это вместо потенциальной null
ссылки! Не пытайтесь избавиться от этого просто потому, что вы привыкли к тому, как работает Java.
Как недавно сказал кто-то другой: придерживайтесь этого в течение нескольких недель, и вы будете стонать каждый раз, когда вам придется возвращаться к языку, который не предлагает Option
типов.
Теперь, что касается вашего вопроса, самый простой и рискованный способ заключается в следующем:
mymap.get(something).get
Вызов .get
на Some
объект возвращает объект внутри. Это, однако, дает вам исключение времени выполнения, если у вас есть None
вместо этого (например, если ключ не был на вашей карте).
Гораздо более чистый способ - использовать Option.foreach
или Option.map
вот так:
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>
Как видите, это позволяет вам выполнять оператор тогда и только тогда, когда у вас есть фактическое значение. Если Option
это None
вместо того, чтобы , ничего не произойдет.
Наконец, также популярно использовать сопоставление с образцом для Option
таких типов:
scala> map.get(1) match {
| case Some(i) => println("Got something")
| case None => println("Got nothing")
| }
Got something
Автор: Frank
Размещён: 22.02.2012 06:15
0 плюса
Я лично , как с помощью .getOrElse(String)
и использовать что - то вроде «Нет» , как то есть по умолчанию .getOrElse("None")
.
Вопросы из категории :
- scala Есть ли реальный опыт использования программной транзакционной памяти?
- scala Преобразование коллекции Java в коллекцию Scala
- scala Что означает один апостроф в Scala?
- scala Самый масштабируемый веб-стек для высокопроизводительного приложения Flash / Flex / AIR?
- scala Разбиение макета Scala на инфиксном операторе
- scala Как мне обойти стирание типа на Scala? Или, почему я не могу получить параметр типа моих коллекций?
- scala Перегрузка конструктора Scala?
- scala Scala-эквивалент Java java.lang.Class <T> Object
- scala Синтаксис Скала точка (или его отсутствие)
- scala Предпочтительный способ создания списка Scala
- map Случайный элемент на карте
- map remove_if эквивалентно для std :: map
- map По каким причинам Map.get (Object key) не является (полностью) универсальным
- map Расстояние между 2 геокодами
- map c ++ map find () для возможной вставки (): как оптимизировать операции?
- map When should I use ConcurrentSkipListMap?
- map Использование STL-карты указателей на функции
- map Как сопоставить ключ CAPS LOCK в VIM?
- map Как вставить пару в карту
- map Карта и сортировка за одну итерацию в Javascript?