2017-02-27 47 views
4

在Pharo中是否存在对应于Java的ThreadLocals的等价物或实现类似行为的方法?例如,在Hibernate中,ThreadLocals用于通过单个getCurrentSession方法调用提供一个线程(当前请求/上下文)“范围”工作实例的统一体 - 名为Session on Hibernate。开发人员无需担心,只需相信该方法将返回正确的工作单元。 Pharo有可能吗?ThreadLocal-like在Pharo Smalltalk

我在Pharo Books(Pharo的例子,Pharo enterprise和Deep Pharo)和in this page上浏览过此文件,但找不到有用的信息。

回答

7

在Pharo中,您使用了ProcessLocalVariable的子类。 例如:

"Create a class to store you variable" 
ProcessLocalVariable subclass: #MyVariable. 

"Use it like this" 
MyVariable value: myValue. 

"Inside your code, access to current value like this" 
MyVariable value. 

注意,更强大的比线程你有“动态变量”,这是相对于执行堆栈(比线程更精确的)本地变量 你使用这样的:

"Create a class to store you variable" 
DynamicVariable subclass: #MyVariable. 

"Use it like this" 
MyVariable 
    value: myValue 
    during: [ 
     "... execute your code here... usually a message send" 
     self doMyCode ]. 

"Inside your code, access to current value like this" 
MyVariable value. 

这种变量提供相同的功能(它们甚至更强大),通常是最好的替代品。

+0

甜!非常感谢! – VitorCruz

+0

相关的好奇心:创建一个子类是非常必要的,或者我可以直接使用ProcessLocalVariable/DynamicVariable? – VitorCruz

+0

我能想到的唯一例子是你可能需要一个进程(或其中的一部分)的本地变量,它是一个缓存:你不希望缓存在特定计算之外可见。你知道任何其他可能有用的情况吗? –

相关问题