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