Version 10 of Namespace resolution of Variables & Procedures

Updated 2004-10-19 09:28:50 by MS

The following code example illustrates how different types of namespace path addressing effects what is being accessed (Variables) or executed (Procedures).

Tom Krehbiel


 set Variable "::Variable"

 proc TestProc {} {
     puts "::proc"
 }

 namespace eval Namespace {
     namespace eval Namespace {
         variable Variable "::Namespace::Namespace Variable"
         proc TestProc {} {
             puts "::Namespace::Namespace proc"
         }
     }
     variable Variable "::Namespace Variable"
     proc TestProc {} {
         puts "::Namespace proc"
     }
     proc test0 {} {
         puts "$::Variable"
     }
     proc test1 {} {
         puts "$::Namespace::Variable"
     }
     proc test2 {} {
         puts "$Namespace::Variable"
     }
     proc test3 {} {
         ::TestProc
     }
     proc test4 {} {
         TestProc
     }
     proc test5 {} {
         Namespace::TestProc
     }
 }

 % Namespace::test0
 ::Variable

 % Namespace::test1
 ::Namespace Variable

 % Namespace::test2
 ::Namespace::Namespace Variable

 % Namespace::test3
 ::proc

 % Namespace::test4
 ::Namespace proc

 % Namespace::test5
 ::Namespace::Namespace proc

What's special about {}

 % set {}
 can't read "": no such variable
 % namespace eval ai {
    variable {}
    set {} 1
   }
 1
 % set {}
 1
 % namespace eval ai {
    variable y
    set y 1
   }
 1
 % set y
 can't read "y": no such variable

RHS This seems like something that should probably be filed as a bug, unless there's something I'm missing.

MS cannnot reproduce this behaviour; neither with HEAD (2004-10-19) nor with tcl8.4.6.

Category Example