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> 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