DynamicVariable
est une mise en œuvre du prêt et de la dynamique de la portée des modèles. Cas d'utilisation d' DynamicVariable
est à peu près similaire à l' ThreadLocal
en Java (comme une question de fait, DynamicVariable
utilise InheritableThreadLocal
derrière la scène) - il est utilisé lorsque vous avez besoin de faire un calcul dans un champ clos, où chaque thread a son propre exemplaire de la valeur de la variable:
dynamicVariable.withValue(value){ valueInContext =>
// value used in the context
}
Étant donné qu' DynamicVariable
utilise un héritables ThreadLocal
, la valeur de la variable est passé pour le fils engendré dans le contexte:
dynamicVariable.withValue(value){ valueInContext =>
spawn{
// value is passed to the spawned thread
}
}
DynamicVariable
(et ThreadLocal
) est utilisé dans Scalatra pour la même raison, il est utilisé dans de nombreux autres cadres (Ascenseur, Spring, Struts, etc.) - c'est un non-intrusive moyen de stocker et de transmettre autour de contexte(thread)-des informations spécifiques.
Rendant HttpServletResponse
et HttpServletRequest
des variables dynamiques (et, ainsi, la liaison à un thread spécifique que les processus de demande) est tout simplement le moyen le plus facile d'obtenir n'importe où dans le code (ne passant pas par des arguments de méthode ou de toute façon d'autre explicitement).