是否有理由不使用 @var 或 @@var 在 Ruby 模块中,该模块不是注定要用作类中的 mixin?我已经进行了实验,两个变量都导致了相同的行为(简单的模块,基本上是 @var 或 @@var 的 getter 和 setter)。我还没有找到一个例子或解释说一个模块可以与一些可变状态一起使用。它几乎似乎在 java 中充当单例。
我发现了一段使用 @@vars 的代码,它从来没有在任何其他类中包含/扩展 - 所以基本上开发人员正在使用模块来保存一些可能会更新但希望模块的所有消费者的状态在任何给定时间看到相同的状态,我想我可以看到一些有价值的案例,但由于我从未见过任何记录在案的案例,我觉得这很奇怪。
无论如何,在模块的上下文中实例 @var 与“类”@@var 有什么区别吗?
编辑:
所以我做了更多的实验。所以我上面的问题是假设没有使用 mixins。这基本上说有一个类变量用于所有.....模块的一个实例(再次有点像单例),或者你有一个在所有实例之间共享的实例变量......模块的一个实例,因此使用for state 会导致相同的行为。但是,我创建了一个实例方法,它基本上是一个实例 getter,与我的模块方法 getter 一起使用,并在一个类中做了一个混合。对于@@var,单个模块实例和所有类共享它设置的值。使用@var,单个“模块实例”有它自己的值,然后为mixin 实例方法设置@var 的每个类实例都有它自己的@var。
我想这是有道理的。