2016-09-29 2 views
1

У меня есть куча сущностей, для которых хранятся значения на карте. Я знаю, что некоторые из них не имеют ценности.Idiomatic Scala: Карта со значением типа Опция

Это хорошая практика, чтобы сделать это явным, используя Map[Entity, Option[Value]], или вы бы сказали, что у самой Map уже есть эти семантики?

+3

Семантически эти два решения не эквивалентны. Если вам нужно знать, какие сущности существуют (на основе набора ключей), вам необходимо использовать свое решение. Тем не менее, я по-прежнему буду придерживаться второго подхода (используя простую «карту») и управлять множеством всех entites в другом месте. Затем «Карта» определяет сопоставление между «Entity» и «Value», а если нет сопоставления, то нет причин добавлять «Entity» в качестве ключа в первую очередь. – fxlae

+0

Лично я считаю, что использовать значение Option не имеет смысла (даже если вам нужно иметь дело с дефолтом по умолчанию, вы можете использовать 'withDefaultValue'). Но я должен отметить этот вопрос, поскольку он довольно субъективен. возможно, http://programmers.stackexchange.com/ должно быть лучше –

ответ

2

У карты есть метод get, который уже возвращает Option, так что это действительно не нужно и путает параметры типа вашей карты.

1

Просто используйте Map[Key, Value]

Map[Key, Option[Value]] является излишеством

Для второго случая Map("key" -> None). Вы не хотите хранить ключи, значение которых равно

2

Это зависит от варианта использования. Вы можете или не должны иметь возможность различать сценарии «нет значения» и «нет ключа». Представьте, например, сопоставление между именем пользователя и средним именем. Если ключ присутствует, но значение равно None, это означает, что у пользователя нет среднего имени. Если ключ отсутствует, то у вас нет записи этого пользователя.

С другой стороны, предположим, что вы указываете номер года на день недели, на который выпадает 29 февраля. В этом случае не обязательно должны отображаться не-високосные годы на карте, и вы можете предположить, что если ключ отсутствует, это связано с тем, что с ним нет никакой ценности.

Смежные вопросы