6

一般に、グローバル キャッシュには、グローバル変数、定数、またはクラス インスタンス変数のどちらが適していますか?

それぞれの例を次に示します。

module Foo
  $FOO_CACHE = {}
  def self.access_to_cache
    $FOO_CACHE
  end
end

module Foo
  CACHE = {}
  def self.access_to_cache
    CACHE
  end
end

module Foo
  @cache = {}
  def self.access_to_cache
    @cache
  end
end
4

1 に答える 1

7

これは最終的にはかなり主観的なものですが、各オプションを 1 つずつ説明します。

  • グローバル変数:いいえ…グローバル変数をモジュール (またはクラスなど) 内に置くことはあまり意味がないため、とにかくどこでもスコープ内になります。グローバル変数以外のものを使用できる場合は、常にそうする必要があります。

  • 定数:いいえ…キャッシュが定数ではないため! Ruby では、定数を変更できないと強制されていませんが、そうすべきだという意味ではありません。それらが定数と呼ばれる理由があります。

  • クラス インスタンス変数:はい…ここで意味をなすのはこれだけだからです (名前はそうではないかもしれませんが、技術的にはここではモジュール インスタンス変数ですが、それはかなりペダンティックです)。これは、変更する意味があり、何らかのスコープによってカプセル化されている 3 つのうちの 1 つだけです。

于 2012-05-28T03:15:50.707 に答える