Совет заключается в том, чтобы в первую очередь избегать использования таких изменяемых структур данных.
Сделайте класс неизменным и измените методы, например updateUser
, чтобы возвращать новый обновленный экземпляр вместо изменения текущего экземпляра.
Но если вы должны это сделать, Option
специально предназначен для случаи, когда значения могут присутствовать или не присутствовать. Такие методы, как map
и getOrElse
, позволяют легко (и безопасно) использовать значения Option
с очень небольшими накладными расходами.
Например, так вы можете безопасно вычислять name
и hoursToStart
:
val name = classInstance.myThread.fold("NoName")(_.name)
val hoursToStart = classInstance.myTransformUnit.fold(0)(_.waitTime.hours)
Если вы хотите использовать несколько значений Option
, используйте for
следующим образом:
for {
thread <- classInstance.myThread
user <- classInstance.nextUser
unit <- classInstance.myTransformUnit
} {
// Code that uses thread, user, and unit
}
Код будет вызываться только в том случае, если все три значения не None
.