Constantes

Las constantes se definen escribiendo la primera letra en mayúsculas, pero normalmente se escriben todas ellas. Si despues de definir esta constante tratas de modificarla te salta un aviso de que estás modificando una constante.

  MAX_SPEED = 100
  MAX_SPEED = 1000
  # warning: already initialized constant MAX_SPEED
  # warning: previous definition of MAX_SPEED was here

En cambio si la constante es un objeto y tratas de modificarlo no dice nada (dado que está guardando la referencia a memoria), para poder evitar que nos modifiquen una constante objeto existe el método freeze. De tal manera que si creamos un array por ejemplo podemos inicializarlo y evitar que lo modifiquen la consante pero no el objeto que tenga dentro.

TYPES = []
TYPES << "freighter"
# can be modified

TYPES.freeze
TYPES << "freighter"
# RuntimeError: can't modify frozen Array

TYPES[0].upcase!
# FREIGHTER