Capítulo 21. Constantes

Una constante tiene un nombre que comienza con una letra mayúscula. Se le debe asignar valor sólo una vez. En la implementación actual de Ruby, reasignar un valor a una constante genera un aviso y no un error (la versión no ANSI de eval.rb no informa de este aviso):

  ruby> fluid = 30
  30
  ruby> fluid = 31
  31
  ruby> Solid = 32
  32
  ruby> Solid = 33
  (eval):1: warning: already initialized constant Solid
  33
  

Las constantes se pueden definir en una clase, pero a diferencia de las variables de instancia, son accesibles desde el exterior de la misma.

  ruby> class ConstClass
  ruby|   C1=101
  ruby|   C2=102
  ruby|   C3=103
  ruby|   def show
  ruby|           print C1," ",C2, " ",C3,"\n"
  ruby|   end
  ruby| end
  nil
  ruby> C1
  ERR: (eval):1: uninitialized constant C1
  ruby> ConstClass::C1
  101
  ruby> ConstClass.new.show
  101 102 103
  nil
  

Las constantes también se pueden definir en un módulo.

  ruby> module ConstModule
  ruby|   C1=101
  ruby|   C2=102
  ruby|   C3=103
  ruby|   def showConstants
  ruby|           print C1," ",C2," ",C3,"\n"
  ruby|   end
  ruby| end
  nil
  ruby> C1
  ERR: (eval):1: uninitialized constant C1
  ruby> include ConstModule
  Object
  ruby> C1
  101
  ruby> showConstants
  101 102 103
  nil
  ruby> C1=99 # realmente una idea no muy buena
  99
  ruby> C1
  99
  ruby> ConstModule::C1 # La constante del módulo queda sin tocar ...
  101
  ruby> ConstModule::C1=99
  ERR: (eval):1: compile error
  (eval):1: parse error
  ConstModule::C1=99
                ^
  ruby> ConstModule::C1 #... independientemente de lo que hayamos jugado con ella
  101