在Ruby中使用常量或类变量?

52

我已经学习了几个月的Ruby编程,现在想知道何时适合使用常量和类变量以及相反的情况。 (我正在使用Rails,在模型中考虑常量)。

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

或者

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

有没有情况下其中一种更可取?或者这只是口味/风格问题?

5个回答

58

重要的是,通过使用常量符号,您向读者明确表明。小写、冻结字符串给人的印象可能是可以被设置的,这会迫使某些人重新阅读 RDoc。


8
+1 - 并且想想那些无法实现自己命运(从不变化)的可怜变量!关于RDoc注释,需要注意常量默认会被记录在文档中。 - Gareth
3
可怜的不被爱的变量。 - Charlie Martin

12
如果这些是您在源代码中定义且不希望在代码执行期间更改的常量值,那么我建议使用“constant”。

如果您计划在执行期间动态设置和/或更改这些值,则使用具有getter和setter的类变量。


8

基本上,可以这样说:如果您需要一个常量,请使用常量。如果您需要一个变量,请使用变量。看起来您的类型列表是常量,因为它是一个不可变数组,所以在这种情况下使用常量是有意义的。


3

2
如果您不想在程序运行时更改值,并且您允许在类外访问该值,并使其保持不变,请使用常量。
否则,您可以使用类变量。但请注意,类变量在子类和子类实例之间共享。因此,如果您可能会将来实现子类,则必须非常小心地使用类变量。
有关更多信息,请参见此处的答案:Ruby中的类变量

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接