DynamicVariable
- реализация модели ссуды и динамического объема.Вариант использования DynamicVariable
очень похож на ThreadLocal
в Java (на самом деле DynamicVariable
использует InheritableThreadLocal
за кулисами) - он используется, когда вам нужно выполнить вычисления в закрытой области видимостигде каждый поток имеет свою собственную копию значения переменной:
dynamicVariable.withValue(value){ valueInContext =>
// value used in the context
}
Учитывая, что DynamicVariable
использует наследуемое ThreadLocal
, значение переменной передается потокам, созданным в контексте:
dynamicVariable.withValue(value){ valueInContext =>
spawn{
// value is passed to the spawned thread
}
}
DynamicVariable
(и ThreadLocal
) используется в Scalatra по той же причине, что и во многих других средах (Lift, Spring, Struts и т. Д.) - это ненавязчивый способ хранения ипередавать контекстно-зависимую информацию.
Создание HttpServletResponse
и HttpServletRequest
динамических переменных (и, следовательно, привязка к определенному потоку, обрабатывающему запрос) - это просто самый простой способ получить их где-нибудь в коде (не передавая аргументы метода или как-либо ещеиначе явно).