Извлечение значения поля по умолчанию из объекта внутри Option - PullRequest
0 голосов
/ 12 марта 2020

У меня есть класс A, который содержит опцию класса B (скажем, b), которая может быть None. B содержит строковое значение (скажем, str), которое мне нужно извлечь, и его значением по умолчанию является пустая строка. Поэтому, если b - None, мне нужно получить пустую строку.

a.b.getOrElse(B).str

Итак, здесь мне нужно создать экземпляр B. Можно ли этого избежать?

Ответы [ 2 ]

5 голосов
/ 12 марта 2020

Да

val res = a.b.map(_.str).getOrElse("")
2 голосов
/ 12 марта 2020

Самое чистое и эффективное решение - использовать fold:

a.b.fold("")(_.str)

Значение по умолчанию "" может быть с таким же успехом вычислено на основе других значений в a.

Использование map затем getOrElse означает тестирование значения Option дважды, тогда как fold тестирование только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...