代码之家  ›  专栏  ›  技术社区  ›  Ben Crouse

Ruby中的常量或类变量?

  •  46
  • Ben Crouse  · 技术社区  · 16 年前

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

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

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

    是否存在一个比另一个更好的情况?还是只是品味/风格的问题?

    5 回复  |  直到 6 年前
        1
  •  55
  •   Charlie Martin    16 年前

    最重要的是,通过使用常量符号,你可以让读者明白。小写,冻结的字符串给人的印象是 可以 可设置,强制某人返回并读取RDOC。

        2
  •  10
  •   Raimonds Simanovskis    16 年前

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

    如果您计划在执行期间动态地设置和/或更改这些值,那么在getter和setter中使用类变量。

        3
  •  8
  •   August Lilleaas    16 年前

    基本上,你可以这样说:如果你想要一个常数,用一个常数。如果你想要一个变量,使用一个变量。您的类型列表似乎是常量,因为它是一个冻结数组,所以在本例中使用常量是有意义的。

        4
  •  1
  •   Community Bayu Bramantya    7 年前

    如果不希望在程序运行时更改该值, 允许在类外访问该值是很舒服的,请使用常量。

    否则,可以使用类变量。但是,要知道类变量在子类和子类实例之间是共享的。因此,如果将来某个时候您可能实现一个子类,那么您必须非常小心地使用类变量。

    有关更多信息,请参阅此处的答案: Class variables in Ruby

        5
  •  0
  •   berkos    6 年前

    如果你想让自己的隐私永远保密,你可以这样做:

    FOO = 18
    private_constant :FOO