Во многих ситуациях я обнаруживаю, что мне нужно создавать долгоживущие значения внутри области функций, и нет необходимости в том, чтобы эти данные находились в области класса/объекта.
Например,
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
.
- Поддерживается ли что-то подобное на уровне языка?
- Если нет, есть ли какой-либо стандартный метод, который вы используете в этой ситуации?