Tcl - Spazi dei nomi

Lo spazio dei nomi è un contenitore per un insieme di identificatori utilizzato per raggruppare variabili e procedure. Gli spazi dei nomi sono disponibili dalla versione 8.0 di Tcl. Prima dell'introduzione degli spazi dei nomi, esisteva un unico ambito globale. Ora con gli spazi dei nomi, abbiamo partizioni aggiuntive di ambito globale.

Creazione dello spazio dei nomi

Gli spazi dei nomi vengono creati utilizzando l'estensione namespacecomando. Di seguito è mostrato un semplice esempio per la creazione dello spazio dei nomi:

#!/usr/bin/tclsh

namespace eval MyMath {
  # Create a variable inside the namespace
  variable myResult
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
  set ::MyMath::myResult [expr $a + $b]
}
MyMath::Add 10 23

puts $::MyMath::myResult

Quando il codice sopra viene eseguito, produce il seguente risultato:

33

Nel programma sopra, puoi vedere che c'è uno spazio dei nomi con una variabile myResult e una procedura Add. Ciò rende possibile creare variabili e procedure con gli stessi nomi in spazi dei nomi diversi.

Spazi dei nomi annidati

Tcl consente l'annidamento degli spazi dei nomi. Di seguito viene fornito un semplice esempio per l'annidamento degli spazi dei nomi:

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
}

namespace eval extendedMath {
   # Create a variable inside the namespace
   namespace eval MyMath {
      # Create a variable inside the namespace
      variable myResult
   }
}
set ::MyMath::myResult "test1"
puts $::MyMath::myResult
set ::extendedMath::MyMath::myResult "test2"
puts $::extendedMath::MyMath::myResult

Quando il codice sopra viene eseguito, produce il seguente risultato:

test1
test2

Importazione ed esportazione dello spazio dei nomi

Come puoi vedere negli esempi precedenti dello spazio dei nomi, usiamo molti operatori di risoluzione dell'ambito ed è più complesso da usare. Possiamo evitarlo importando ed esportando gli spazi dei nomi. Di seguito viene fornito un esempio:

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}

namespace import MyMath::*
puts [Add 10 30]

Quando il codice sopra viene eseguito, produce il seguente risultato:

40

Dimentica lo spazio dei nomi

È possibile rimuovere uno spazio dei nomi importato utilizzando forgetsottocomando. Di seguito viene mostrato un semplice esempio:

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
namespace forget MyMath::*

Quando il codice sopra viene eseguito, produce il seguente risultato:

40