Prev | Contents | Next

| Ruby user's guide | Class constants |

A constant has a name starting with an uppercase character. It should be assigned a value at most once. In the current implementation of ruby, reassignment of a constant generates a warning but not an error (the non-ANSI version of eval.rb does not report the warning):

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

Constants may be defined within classes, but unlike instance variables, they are accessible outside the class.

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

Constants can also be defined in modules.

    ruby> module ConstModule
        |   C1=101
        |   C2=102
        |   C3=103
        |   def showConstants
        |     print C1," ",C2," ",C3,"\n"
        |   end
        | 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  # not really a good idea
       99
    ruby> C1
       99
    ruby> ConstModule::C1  # the module's constant is undisturbed ...
       101
    ruby> ConstModule::C1=99
    ERR: (eval):1: compile error
    (eval):1: parse error
    ConstModule::C1=99
                    ^
    ruby> ConstModule::C1  # .. regardless of how we tamper with it.
       101

Prev | Contents | Next