ruby中的常量或类变量?

时间:2008-12-22 22:16:34

标签: ruby constants class-variables

我已经在Ruby中编程了几个月了,我想知道何时使用常量而不是类变量,反之亦然。 (我在Rails工作,考虑模型中的常量)。

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

OR

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

是否存在一个人比另一个人更可取的情况?或者仅仅是品味/风格问题?

5 个答案:

答案 0 :(得分:55)

主要的是,通过使用CONSTANT符号,您可以向读者说清楚。小写,冻结字符串给人的印象是可能可设置,迫使某人回去阅读RDoc。

答案 1 :(得分:10)

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

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

答案 2 :(得分:8)

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

答案 3 :(得分:1)

如果您不希望在程序运行期间更改值,,您可以轻松地允许在类外部访问该值,使用常量。

否则,您可以使用类变量。但是,请注意,类变量在子类和子类实例之间共享。因此,如果您将来某个时候实现子类,则必须非常小心使用类变量。

有关详情,请参阅此处的答案:Class variables in Ruby

答案 4 :(得分:0)

如果要将自己的Constant设为私有,则可以随时执行以下操作:

FOO = 18
private_constant :FOO