Во многих ситуациях я нахожу, что мне нужно создать долгоживущие значения внутри области действия функции, и нет необходимости, чтобы эти данные находились в области видимости класса / объекта.
Например,
object Example {
def activeUsers = {
val users = getUsersFromDB // Connects to the database and runs a query.
users.filter(_.active)
}
}
Выше переменная users
находится в правильной области, но она будет выполнять запрос к базе данных каждый раз, когда вызывается функция activeUsers
.
Чтобы избежать этого, я мог бы переместить переменную users
за пределы области действия функции:
object Example {
val users = getUsersFromDB // Connects to the database and runs a query
def activeUsers = {
users.filter(_.active)
}
}
Но это делает его доступным и для других функций.
Иначе, я мог бы создать отдельный объект для включения функции:
object Example {
object activeUsers {
val users = getUsersFromDB // Connects to the database and runs a query.
def apply() = {
users.filter(_.active)
}
}
}
Но это включает в себя дополнительный шаблонный код, использование другого объекта и небольшие странности синтаксиса, связанные с apply
.
- Поддерживается ли что-то подобное на уровне языка?
- Если нет, то какой стандартный метод вы используете в этой ситуации?