クラスに含まれている場合、インスタンスメソッドとクラスメソッドの両方を含むモジュールがあります。インスタンスメソッドとクラスメソッドは両方ともクラス変数にアクセスするものとする。モジュールクラスとインスタンスメソッドのクラス変数へのアクセス
module MyModule
@@a_class_variable = "lorem ipsum"
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def a_class_method
@@a_class_variable << "abc"
end
end
# Use it in constructor
def initialize
@@a_class_variable << "abc"
end
def an_instance_method
@@a_class_variable << "abc"
end
end
私はいくつかのクラスでMyModule
を含め、インタプリタは言う:NameError:MyModuleというにおける初期化されていないクラス変数@@ a_class_method ::クラスメソッド
は私が間違って何をしているのですか?
感謝を!これは実際に実行可能にしますが、クラス変数を公開します。機能を保持し、クラス変数privateへのアクセスを維持することはありませんか?私がクラスに入っていると、インスタンスとクラスの両方のメソッドから直接クラス変数にアクセスできます。 – nsommer
あなたは完全に正しいです。私は答えを更新しました。 –
私は今、ClassMethodsのメソッドとメソッドの違いを理解していると思います。私は違いがないと思ったが、そこにある。また、レールからコードの一部(ActiveSupportのコールバックなど)を検索し、提案したもの(アクセサメソッド)とまったく同じように実装したようです。私はそれを前に理解しようとしましたが、今まで失敗しました。すべてこれが私が望んでいたものではありません(読んでください:コードは私が期待していたほどきれいではありません)。しかし、それはあなたのせいではないので、私は答えを受け入れます。 – nsommer