クラスで mixin として使用される予定のない Ruby モジュールで @var または @@var を使用しない理由はありますか? 私が実験したところ、両方の変数が同じ動作になりました (基本的に @var または @@var の getter と setter を持つ単純なモジュール)。モジュールを可変状態で使用できるという例や説明は見つかりませんでした。Javaのシングルトンとして機能しているようです。
全体で @@vars を使用しているコードを見つけましたが、それは他のクラスでは決して include/extend されていなかったので、基本的に開発者はモジュールを使用して、更新される可能性のある状態を保持していましたが、モジュールのすべてのコンシューマーにいつでも同じ状態を見ることができ、これが価値のあるいくつかのケースを見ることができると思いますが、これについて文書化されたケースを見たことがないので、奇妙だと思いました.
とにかく、モジュールのコンテキストでインスタンス @var と「クラス」 @@var に違いはありますか?
編集:
そこで、もう少し実験してみました。したがって、上記の質問は、ミックスインを使用しないことを前提としていました。これは基本的に、モジュールのすべての...1つのインスタンス(これもシングルトンのようなもの)のクラス変数があるか、モジュールのすべての...1つのインスタンス間で共有されるインスタンス変数があるため、いずれかを使用することを示していますfor state は同じ動作になります。ただし、基本的にインスタンス ゲッターであるインスタンス メソッドを作成して、モジュール メソッド ゲッターと併用し、クラスを mixin しました。@@var の場合、単一のモジュール インスタンスとすべてのクラスが、設定された値を共有します。@var では、単一の「モジュール インスタンス」に独自の値があり、mixin インスタンス メソッドに @var を設定する各クラス インスタンスに独自の @var がありました。
これは一理あると思います。