Provided by: tcl9.0-doc_9.0.1+dfsg-1_all bug

NAME

       const - create and initialize a constant

SYNOPSIS

       const varName value
________________________________________________________________________________________________________________

DESCRIPTION

       This  command  is  normally  used  within  a  procedure body (or method body, or lambda term) to create a
       constant within that procedure, or within a  namespace  eval  body  to  create  a  constant  within  that
       namespace.   The  constant  is  an unmodifiable variable, called varName, that is initialized with value.
       The result of const is always the empty string on success.

       If a variable varName does not exist, it is created with its value set to value and marked as a constant;
       this means that no other command (e.g., set, append, incr, unset) may  modify  or  remove  the  variable;
       variables are checked for whether they are constants before any traces are called.  If a variable varName
       already exists, it is an error unless that variable is marked as a constant (in which case const is a no-
       op).

       The varName may not be a qualified name or reference an element of an array by any means. If the variable
       exists and is an array, that is an error.

       Constants  are  normally  only  removed  by  their  containing procedure exiting or their namespace being
       deleted.

EXAMPLES

       Create a constant in a procedure:

              proc foo {a b} {
                  const BAR 12345
                  return [expr {$a + $b + $BAR}]
              }

       Create a constant in a namespace to factor out a regular expression:

              namespace eval someNS {
                  const FOO_MATCHER {(?i)}\mfoo\M}

                  proc findFoos str {
                      variable FOO_MATCHER
                      regexp -all $FOO_MATCHER $str
                  }

                  proc findFooIndices str {
                      variable FOO_MATCHER
                      regexp -all -indices $FOO_MATCHER $str
                  }
              }

       Making a constant in a loop doesn't error:

              proc foo {n} {
                  set result {}
                  for {set i 0} {$i < $n} {incr i} {
                      const X 123
                lappend result [expr {$X + $i**2}]
                  }
              }

SEE ALSO

       proc(3tcl), namespace(3tcl), set(3tcl), unset(3tcl)

KEYWORDS

       namespace, procedure, variable, constant

Tcl                                                    9.0                                           const(3tcl)