常量或类variables在ruby?

我已经使用Ruby进行了几个月的编程,而且我想知道何时使用常量来超越类variables,反之亦然。 (我在Rails中工作,思考模型中的常量)。

class Category TYPES = %w(listing event business).freeze end 

要么

 class Category @@types = %w(listing event business).freeze cattr_reader :types end 

有一种情况比另一种更可取? 还是仅仅是品味/风格的问题?

最主要的是,通过使用CONSTANT表示法,您可以向读者说清楚。 小写,冻结的string给人的印象是可以设置的,强迫某人回去读RDoc。

如果这些是在源代码中定义的真正常量值,并且不希望在代码执行期间更改,那么我会推荐使用常量。

如果您打算在执行过程中dynamic设置和/或更改这些值,请使用具有getters和setter的classvariables。

基本上,你可以这样说:如果你想要的东西是不变的,使用一个常量。 如果你想要的东西是可变的,使用一个variables。 看起来你的types列表是常量,看到它是一个冻结数组,所以我认为在这种情况下使用常量是有意义的。

如果您不希望在程序的运行时间内值发生变化, 并且您希望允许在课程外部访问该值,请使用常量。

否则,你可以使用一个类variables。 但是请注意,类variables是在子类和子类的实例之间共享的。 所以如果你在将来某个时候实现一个子类,你必须非常小心使用类variables。

有关更多信息,请参阅这里的答案: Ruby中的类variables