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