Constants or class variables in ruby?

Ben Crouse picture Ben Crouse · Dec 22, 2008 · Viewed 16.4k times · Source

I've been programming in Ruby for a few months now, and I'm wondering when it is appropriate to use constants over class variables and vice versa. (I'm working in Rails, thinking about constants in models).

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

OR

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

Are there circumstances where one is preferable to another? Or is it just a matter of taste/style?

Answer

Charlie Martin picture Charlie Martin · Dec 22, 2008

The main thing is that by using the CONSTANT notation, you're making it clear to the reader. the lower case, frozen string gives the impression is might be settable, forcing someone to go back and read the RDoc.