Вместо того, чтобы использовать apply
для доступа к карте, вы всегда можете использовать get
, который возвращает Option[V]
, а затем getOrElse
:
map.get(k) getOrElse Nil
Одной замечательной особенностью scalaz библиотеки функционального программирования является унарный оператор ~
, который означает «или ноль», если тип значения имеет «ноль». "определено (что List
делает, ноль, конечно, Nil
). Таким образом, код становится:
~map.get(k)
Это вдвойне полезно, потому что тот же синтаксис работает там, где (например) ваши значения Int
, Double
и т. Д. (Все, для чего существует класс типов Zero
).
<Ч />
В списке рассылки scala было много споров об использовании Map.withDefault
из-за того, как он ведет себя, в частности, в отношении метода isDefinedAt
. По этой причине я стараюсь держаться подальше от этого.