私はRuby on Rails 3.0.7を使用していますが、クラス(@@
)とグローバル($
)変数をいつ使用し、なぜ使用するべきか、またthis caseで正しく使用されているかどうかを知りたいと思います。クラスとグローバル変数を使用する時期と理由
P.S .:私はmentioned case-problemを持っているので、この質問をしています。答えには、クラス変数の使用が提案されています。そのような場合には、それを使用することをお勧めします。
私はRuby on Rails 3.0.7を使用していますが、クラス(@@
)とグローバル($
)変数をいつ使用し、なぜ使用するべきか、またthis caseで正しく使用されているかどうかを知りたいと思います。クラスとグローバル変数を使用する時期と理由
P.S .:私はmentioned case-problemを持っているので、この質問をしています。答えには、クラス変数の使用が提案されています。そのような場合には、それを使用することをお勧めします。
短い答えは:neverです。
私は、Rubyする新しいんだけど、私は他の言語からこのくらいのを知っていますか:グローバル変数は決してスレッドセーフです。
同じ行に沿って、一意のスレッドしか処理しない限り、ペストのようなシングルトンパターンは避けてください。
編集:
余談として、ルビー依存性の注入のためにグーグルでは、Rubyはそれのいずれかを必要としないことを示唆しています。さて、何を教えてください。します。
宝石や図書館の山があり、そこには何もないとは常に想定されていたので、彼らは基本的にあなたがたった一つのスレッドとIOブロックを持つと仮定します。最初からそうしていなければ、スレッドセーフで非ブロッキングであったかもしれません。しかし、現在、彼らはそうではありません。
彼らはそうしていましたが、イベントドリブンのサーバーでもうまくいきました。
物事が立てば、それは血まみれの混乱です。
イベントマシンはスレッドセーフではありません。シンとゴリアートは同じトークンではありません。 Rack-asyncは、基本的にはすべてのものにパッチを当てた猿です。乗客はフォークを使用し、レール付きのREE/1.8.7をインストールするとスマートになります。 Mongrelはスレッドセーフですが、IOブロッキングです。 WebrickはシングルスレッドとIOブロッキングです。リストは続く。それはただ面倒です。
スレッドセーフなコードを書くのは簡単ですか? –
それは簡単ではありません。まったく。 –
クラス変数は、クイックアンドダーティなキャッシングの形式に使用できます。
class Thing
def expensiveCall
unless @@expensiveResult
@@expensiveResult = ['foo','bar','baz'] # or whatever
end
@@expensiveResult
end
end
これをスタンドアロンの質問にするために時間をかけてください。あなたは元の問題を参照することができますが、これはどこにも行かずに理解できるはずです。 – edgerunner
@edgerunner - 質問を「独立して理解できる」ように更新しました。 – Backo
それはあなたの他の質問が理にかなっている必要があります。時間をかけてこの質問を独自に立ててください。 (IE。あなたの他の質問が削除された場合でも、それは理解できるはずです) – edgerunner