Tcl - Espaces de noms
L'espace de noms est un conteneur pour un ensemble d'identificateurs utilisé pour regrouper des variables et des procédures. Les espaces de noms sont disponibles à partir de la version 8.0 de Tcl. Avant l'introduction des espaces de noms, il n'existait qu'une seule portée globale. Maintenant, avec les espaces de noms, nous avons des partitions supplémentaires de portée globale.
Créer un espace de noms
Les espaces de noms sont créés à l'aide du namespacecommander. Un exemple simple de création d'espace de noms est présenté ci-dessous -
#!/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
Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -
33
Dans le programme ci-dessus, vous pouvez voir qu'il y a un espace de noms avec une variable myResult et une procédure Add. Cela permet de créer des variables et des procédures avec les mêmes noms sous différents espaces de noms.
Espaces de noms imbriqués
Tcl permet l'imbrication des espaces de noms. Un exemple simple d'imbrication d'espaces de noms est donné ci-dessous -
#!/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
Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -
test1
test2
Importation et exportation d'espace de noms
Vous pouvez voir dans les exemples d'espaces de noms précédents, nous utilisons beaucoup d'opérateurs de résolution de portée et c'est plus complexe à utiliser. Nous pouvons éviter cela en important et en exportant des espaces de noms. Un exemple est donné ci-dessous -
#!/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]
Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -
40
Oublier l'espace de noms
Vous pouvez supprimer un espace de noms importé en utilisant forgetsous-commande. Un exemple simple est présenté ci-dessous -
#!/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::*
Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -
40