2017-02-27 10 views
4

JavaのThreadLocalsのPharoに相当するものがありますか、それとも同様の動作を実現する方法ですか?たとえば、HibernateのThreadLocalsは、単一のgetCurrentSessionメソッド呼び出しを通じて、スレッド(現在の要求/コンテキスト)の "スコープ付き"単一インスタンスのSession(HibernateのSessionという名前)を提供するために使用されます。開発者は心配する必要はなく、メソッドが適切な作業単位を返すと信じるだけです。ファロでそれは可能ですか?ThreadLocalのようなPharo Smalltalk

私はPharo Books(Pharoの例、PharoエンタープライズとDeep Pharo)とin this pageでこれをスキップしましたが、有用な情報が見つかりませんでした。

答えて

7

ファロには、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

プロセス(またはその一部)にローカル変数を必要とする可能性のある唯一の例は、キャッシュです。特定の計算の外側にキャッシュを表示したくない場合があります。これが役立つ可能性のある他の事例は知っていますか? –

関連する問題